一、數據庫概述
數據庫(DataBase,DB):指長期保存在計算機的存儲設備上,按照一定規則組織起來,可以被各種用戶或應用共享的數據集合。(文件系統)
數據庫管理系統(DataBase Management System,DBMS):指一種操作和管理數據庫的大型軟件,用於建立、使用和維護數據庫,對數據庫進行統一管理和控制,以保證數據庫的安全性和完整性。用戶通過數據庫管理系統訪問數據庫中的數據。
數據庫軟件應該爲數據庫管理系統,數據庫是通過數據庫管理系統創建和操作的。
數據庫:存儲、維護和管理數據的集合。
數據庫中一行記錄與對象之間的關係。
列:字段
行:一條記錄(實體)
二、sql概述
SQL:Structure Query Language。(結構化查詢語言)
SQL被美國國家標準局(ANSI)確定爲關係型數據庫語言的美國標準,後來被國際化標準組織(ISO)採納爲關係數據庫語言的國際標準。
各數據庫廠商都支持ISO的SQL標準。————普通話
各數據庫廠商在標準的基礎上做了自己的擴展。————方言
在SQL裏只有單引號,沒有雙引號的概念
三、sql的分類
- DDL(Data Definition Language):數據定義語言,用來定義數據庫對象:庫、表、列等; 【CREATE、 ALTER、DROP】
- DML(Data Manipulation Language):數據操作語言,用來定義數據庫記錄(數據); 【INSERT、 UPDATE、 DELETE】
- DQL(Data Query Language):數據查詢語言,用來查詢記錄(數據)。【SELECT】
- DCL(Data Control Language):數據控制語言,用來定義訪問權限和安全級別;
*注意:sql語句以;結尾
在mysql中,字符串類型和日期類型都要用單引號括起來。’tom’ ‘2015-09-04’
空值:null
3.1 DDL:操作數據庫、表、列等
使用的關鍵字:CREATE、 ALTER、 DROP
3.1.1操作數據庫
創建:
create database mydb1;
查詢:
查看當前數據庫服務器中的所有數據庫
show databases;
查看前面創建的mydb2數據庫的定義信息
Show create database mydb2;
修改:
查看服務器中的數據庫,並把mydb2的字符集修改爲utf8;
alter database mydb2 character set utf8;
刪除
drop database mydb3;
其他:
查看當前使用的數據庫
select database();
切換數據庫
use mydb2;
3.1.2操作數據表
語法:
create table 表名(
字段1 字段類型,
字段2 字段類型,
...
字段n 字段類型
);
常用數據類型:
int:整型
double:浮點型,例如double(5,2)表示最多5位,其中必須有2位小數,即最大值爲999.99;
char:固定長度字符串類型; char(10) 'abc '
varchar:可變長度字符串類型;varchar(10) 'abc'
text:字符串類型;
blob:字節類型;
date:日期類型,格式爲:yyyy-MM-dd;
time:時間類型,格式爲:hh:mm:ss
timestamp:時間戳類型 yyyy-MM-dd hh:mm:ss 會自動賦值
datetime:日期時間類型 yyyy-MM-dd hh:mm:ss
查詢:
當前數據庫中的所有表
SHOW TABLES;
查看錶的字段信息
DESC employee;
修改:
在上面員工表的基本上增加一個image列。
ALTER TABLE employee ADD image blob;
修改job列,使其長度爲60。
ALTER TABLE employee MODIFY job varchar(60);
表名改爲user。
RENAME TABLE employee TO user;
修改表的字符集爲gbk
ALTER TABLE user CHARACTER SET gbk;
列名name修改爲username
ALTER TABLE user CHANGE name username varchar(100);
刪除:
DROP TABLE user ;
3.2 DML操作
DML是對錶中的數據進行增、刪、改的操作。
INSERT 、UPDATE、 DELETE
3.2.1插入操作:INSERT
語法: INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...);
注意:列名與列值的類型、個數、順序要一一對應。
可以把列名當做java中的形參,把列值當做實參。
值不要超出列定義的長度。
如果插入空值,請使用null
插入的日期和字符一樣,都使用引號括起來。
3.2.2修改操作:UPDATE
語法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 。。。 WHERE 列名=值
3.2.3刪除操作:DELETE
語法 : DELETE FROM 表名 【WHERE 列名=值】
注意:DELETE 刪除表中的數據,表結構還在;刪除後的數據可以找回
TRUNCATE 刪除是把表直接DROP掉,然後再創建一個同樣的新表。
刪除的數據不能找回。執行速度比DELETE快。
3.3 DQL操作
數據庫執行DQL語句不會對數據進行改變,而是讓數據庫發送結果集給客戶端。
查詢返回的結果集是一張虛擬表。
查詢關鍵字:SELECT
語法: SELECT 列名 FROM 表名
【WHERE --> GROUP BY -->HAVING--> ORDER BY】
語法:
SELECT selection_list /*要查詢的列名稱*/
FROM table_list /*要查詢的表名稱*/
WHERE condition /*行條件*/
GROUP BY grouping_columns /*對結果分組*/
HAVING condition /*分組後的行條件*/
ORDER BY sorting_columns /*對結果分組*/
LIMIT offset_start, row_count /*結果限定*/
3.3.1條件查詢
在查詢時給出WHERE子句,在WHERE子句中可以使用如下運算符及關鍵字:
- =、!=、<>、<、<=、>、>=;
- BETWEEN…AND;
- IN(set);
- IS NULL; IS NOT NULL;
- AND;
- OR;
- NOT;
3.3.2模糊查詢
當想查詢姓名中包含a字母的學生時就需要使用模糊查詢了。模糊查詢需要使用關鍵字LIKE。
通配符:
_ 任意一個字符
%:任意0~n個字符
模糊查詢必須使用LIKE關鍵字。其中 “_”匹配任意一個字母,5個“_”表示5個任意字母。
'%張%' '張_'
3.3.3字段控制查詢
去除重複記錄:兩行或兩行以上記錄中系列的上的數據都相同,需要使用DISTINCT
SELECT DISTINCT sal FROM emp;
查看兩列(值類型)之和:直接做加運算
SELECT *,sal+comm FROM emp;
如果某一列中的數據含有Null值,需要去掉Null值,因爲任何東西與NULL相加結果還是NULL,所以結算結果可能會出現NULL。下面使用了把NULL轉換成數值0的函數IFNULL:
SELECT *,sal+IFNULL(comm,0) FROM emp;
給列名添加別名
在上面查詢中出現列名爲sal+IFNULL(comm,0),這很不美觀,現在我們給這一列給出一個別名,爲total:
SELECT *, sal+IFNULL(comm,0) AS total FROM emp;
3.3.3排序
order by 列名 asc(默認) desc
3.3.4聚合函數
聚合函數自動濾null
聚合函數是用來做縱向運算的函數:
COUNT():統計指定列不爲NULL的記錄行數;
MAX():計算指定列的最大值,如果指定列是字符串類型,那麼使用字符串排序運算;
MIN():計算指定列的最小值,如果指定列是字符串類型,那麼使用字符串排序運算;
SUM():計算指定列的數值和,如果指定列類型不是數值類型,那麼計算結果爲0;
AVG():計算指定列的平均值,如果指定列類型不是數值類型,那麼計算結果爲0;
3.3.5分組查詢
當需要分組查詢時需要使用GROUP BY子句
注:凡和聚合函數同時出現的列名,一定要寫在group by 之後
3.3.6 HAVING子句
查詢工資總和大於9000的部門編號以及工資和:
SELECT deptno, SUM(sal)
FROM emp
GROUP BY deptno
HAVING SUM(sal) > 9000;
注:having與where的區別:
1.having是在分組後對數據進行過濾.
where是在分組前對數據進行過濾
2.having後面可以使用聚合函數(統計函數)
where後面不可以使用聚合函數。
WHERE是對分組前記錄的條件,如果某行記錄沒有滿足WHERE子句的條件,那麼這行記錄不會參加分組;而HAVING是對分組後數據的約束。
3.3.6 LIMIT(只有MySQL裏有)
LIMIT用來限定查詢結果的起始行,以及總行數。
查詢5行記錄,起始行從0開始
SELECT * FROM emp LIMIT 0, 5;
注意,起始行從0開始,即第一行開始!
查詢10行記錄,起始行從3開始
SELECT * FROM emp LIMIT 3, 10;
查詢代碼的書寫順序和執行順序:
查詢語句書寫順序:select – from- where- group by- having- order by-limit
查詢語句執行順序:from - where -group by - having - select - order by-limit