MySql必備基礎知識_第1頁
MySql必備基礎知識_第2頁
MySql必備基礎知識_第3頁
MySql必備基礎知識_第4頁
MySql必備基礎知識_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、正文:1數(shù)據(jù)庫概念(了解)什么是數(shù)據(jù)庫數(shù)據(jù)庫就是用來存儲和管理數(shù)據(jù)的倉庫! 數(shù)據(jù)庫存儲數(shù)據(jù)的優(yōu)先:可存儲大量數(shù)據(jù);方便檢索;保持數(shù)據(jù)的一致性、完整性;安全,可共享;通過組合分析,可產(chǎn)生新數(shù)據(jù)。數(shù)據(jù)庫的發(fā)展歷程沒有數(shù)據(jù)庫,使用磁盤文件存儲數(shù)據(jù); 層次結構模型數(shù)據(jù)庫; 網(wǎng)狀結構模型數(shù)據(jù)庫;關系結構模型數(shù)據(jù)庫:使用二維表格來存儲數(shù)據(jù); 關系-對象模型數(shù)據(jù)庫;MySQL就是關系型數(shù)據(jù)庫!常見數(shù)據(jù)庫Oracle (神諭):甲骨文DB2 IBM;SQL Server :微軟;Sybase :賽貝斯;MySQL 甲骨文;Mysql AB-?sun-?oracle理解數(shù)據(jù)庫RDBMS =管理員(manager

2、) + 倉庫(database) database = N 個 tabletable :表結構:定義表的列名和列類型!表記錄:一行一行的記錄!RDBMS - Relatio nal database我們現(xiàn)在所說的數(shù)據(jù)庫泛指“關系型數(shù)據(jù)庫管理系統(tǒng)( management system)”,即“數(shù)據(jù)庫服務器” 。廠RDBMSMavudgierdatabaseldatabasedatabaseJ當我們安裝了數(shù)據(jù)庫服務器后,就可以在數(shù)據(jù)庫服務器中創(chuàng)建數(shù)據(jù)庫,每個數(shù)據(jù)庫中還可以包含多張表。tableldatabasetable2tabled數(shù)據(jù)庫表就是一個多行多列的表格。在創(chuàng)建表時,需要指定表的列數(shù),以

3、及列名稱,列s- id類型等信息。而不用指定表格的行數(shù),行數(shù)是沒有上限的。下面是tab_stude nt表的結構:varchar(10j& namevarch3r(20& seintvarcharflO)當把表格創(chuàng)建好了之后,就可以向表格中添加數(shù)據(jù)了。向表格添加數(shù)據(jù)是以行為單位的!F面是s_student 表的記錄:S_1001zhangSan23maleS_1002liSi32femaleS 1003wangWu44males names_ages ids_sex大家要學會區(qū)分什么是表結構,什么是表記錄。應用程序與數(shù)據(jù)庫應用程序使用數(shù)據(jù)庫完成對數(shù)據(jù)的存儲!栽據(jù)庫月艮篡器i應用程序【數(shù)盂庫請玻

4、數(shù)臥. 井顯安裝MySQl數(shù)據(jù)庫安裝MySQL參考:MySQL安裝圖解.docMySQL目錄結構MySQL 的數(shù)據(jù)存儲目錄為 data, data 目錄通常在 C:Docume nts and Sett in gsAll UsersApplication DataMySQLMySQL Server data位置。在 data 下的每個目錄都代表一個數(shù)據(jù)庫。MySQ啲安裝目錄下:bin目錄中都是可執(zhí)行文件;文件是MySQL的配置文件;3基本命令啟動和關閉mysql服務器啟動:net start mysql 關閉:net stop mysql在啟動mysql服務后,打開windows任務管理器,會

5、有一個名為的進程運行,所以才是MySQL服務器程序??蛻舳说卿浲顺鰉ysql在啟動MySQL服務器后,我們需要使用管理員用戶登錄MySQL服務器,然后來對服務器進行操作。登錄 MySQL需要使用MySQL的客戶端程序:登錄: mysql -u root -p 123 -h localhost;-u :后面的root是用戶名,這里使用的是超級管理員root ;-p :后面的123是密碼,這是在安裝 MySQL時就已經(jīng)指定的密碼; 退出:quit 或 exit ;在登錄成功后,打開windows任務管理器,會有一個名為的進程運行,所以是客戶端程序。SQL語句1 SQL概 述什么是SQLSQL( S

6、tructured Query Lan guage)是“結構化查詢語言”,它是對關系型數(shù)據(jù)庫的操作語言。它可以應用到所有關系型數(shù)據(jù)庫中,例如:MySQL Oracle、SQL Server等。SQ標準(ANSI/ISO)有:SQL-92: 1992年發(fā)布的SQL語言標準;SQL:1999: 1999 年發(fā)布的SQL:2003: 2003 年發(fā)布的SQL語言標準;SQL語言標準;這些標準就與JDK的版本一樣, 庫對不同標準做了實現(xiàn)。雖然SQL可以用在所有關系型數(shù)據(jù)庫中,但很多數(shù)據(jù)庫還都有標準之后的一些語法,我們可以稱之為“方言”。例如MySQL中的LIMIT語句就是MySQL獨有的方言,其它數(shù)據(jù)

7、庫都 不支持!當然,在新的版本中總要有一些語法的變化。不同時期的數(shù)據(jù)Oracle或SQL Server都有自己的方言。語法要求SQL語句可以單行或多行書寫,以分號結尾; 可以用空格和縮進來來增強語句的可讀性; 關鍵字不區(qū)別大小寫,建議使用大寫;2分類DDL( Data DefinitionLanguage):數(shù)據(jù)定義語言,用來定義數(shù)據(jù)庫對象:庫、表、列等;DML( Data Manipulation Language):數(shù)據(jù)操作語言, 用來定義數(shù)據(jù)庫記錄(數(shù)據(jù));3 DDL基本操作查看所有數(shù)據(jù)庫名稱: 切換數(shù)據(jù)庫:SHOW DATABASESUSE mydb1,切換到 mydb1數(shù)據(jù)庫;操作數(shù)

8、據(jù)庫創(chuàng)建數(shù)據(jù)庫:創(chuàng)建數(shù)據(jù)庫,例如:個數(shù)據(jù)已經(jīng)存在,那么會報錯。例如 的數(shù)據(jù)庫不存在時創(chuàng)建該庫,這樣可以避免報錯。刪除數(shù)據(jù)庫: 刪除數(shù)據(jù)庫,例如: 庫不存在,那么會報錯。 報錯。yyyy-MM-dd ; hh:mm:ssCREATE DATABASE IF NOT EXISTS mydb1 ;CREATE DATABASE mydb1創(chuàng)建一個名為 mydb1的數(shù)據(jù)庫。如果這CREATEDATABASEF NOTEXISTS mydb1,在名為 mydb1DROP DATABASE IF EXISTS mydb1 ;DROP DATABASE myd,刪除名為 mydb1的數(shù)據(jù)庫。如果這個數(shù)據(jù)DR

9、OP DATABASE IF EXISTS mydb1 就算 mydb1 不存在,也不會的ALTER DATABASE mydbl CHARACTER SET utf8修改數(shù)據(jù)庫編碼:修改數(shù)據(jù)庫 mydb1的編碼為utf8。注意,在 MySQ沖所有的UTF-8編碼都不能使用中 間的“-”,即UTF-8要書寫為UTF8數(shù)據(jù)類型MySQL與 Java 樣,也有數(shù)據(jù)類型。MySQL中數(shù)據(jù)類型主要應用在列上。常用類型:int :整型double :浮點型,例如double(5,2)表示最多5位,其中必須有2位小數(shù),即最大 值為;decimal :泛型型,在表單錢方面使用該類型,因為不會出現(xiàn)精度缺失問題

10、; char :固定長度字符串類型;varchar :可變長度字符串類型;text :字符串類型;blob :字節(jié)類型;date :日期類型,格式為:time :時間類型,格式為:timestamp :時間戳類型;操作表創(chuàng)建表:CREATE TABLE表名(列名列類型,列名列類型,);例如:CREATE TABLE stu(sid CHAR(6),sn ameVARCHAR(20),ageINT,genderVARCHAR(10);再例如:CREATE TABLE emp(eidCHAR(6),en ameVARCHAR(50),ageINT,genderVARCHAR(6),birthday

11、DATE,hiredateDATE,salaryDECIMAL(7,2),resumeVARCHAR(1000);1.2.3.4.5.查看當前數(shù)據(jù)庫中所有表名稱:SHOW TABLES查看指定表的創(chuàng)建語句:SHOW CREATE TABLE emp查看emp表的創(chuàng)建語句;查看表結構:DESC emp查看emp表結構;刪除表:DROP TABLE emp刪除emp表;修改表:修改之添加列:給 stu表添加class name列:ALTER TABLE stu ADD (class name varchar(100);修改之修改列類型:修改 stu表的gender列類型為CHAR(2):ALTER

12、 TABLE stu MODIFY gender CHAR(2);修改之修改列名:修改 stu表的gender列名為sex:ALTER TABLE stu cha nge gen der sex CHAR(2);修改之刪除列:刪除 stu表的class name列:ALTER TABLE stu DROP class name;修改之修改表名稱:修改 stu表名稱為student :ALTER TABLE stu RENAME TO stude nt;3基本命令啟動和關閉mysql服務器啟動:net start mysql 關閉:net stop mysql在啟動mysql服務后,打開wind

13、ows任務管理器,會有一個名為的進程運行,所以才是MySQL服務器程序??蛻舳说卿浲顺鰉ysql在啟動MySQL服務器后,我們需要使用管理員用戶登錄MySQL服務器,然后來對服務器進行操作。登錄 MySQL需要使用MySQL的客戶端程序:登錄: mysql -u root -p 123 -h localhost;-u :后面的root是用戶名,這里使用的是超級管理員root ;-p :后面的123是密碼,這是在安裝 MySQL時就已經(jīng)指定的密碼;-h :后面給出的localhost 是服務器主機名,它是可以省略的,例如:mysql -u root -p 123;退出:quit 或 exit ;

14、在登錄成功后,打開windows任務管理器,會有一個名為的進程運行,所以是客戶端程 序。SQL語句1 SQL概 述什么是SQLSQL( Structured Query Lan guage)是“結構化查詢語言”,它是對關系型數(shù)據(jù)庫的操作語言。它可以應用到所有關系型數(shù)據(jù)庫中,例如:MySQL Oracle、SQL Server等。SQ標準(ANSI/ISO)有:SQL語言標簽;SQL語言標簽;SQL-92: 1992年發(fā)布的SQL語言標準;SQL:1999: 1999 年發(fā)布的SQL:2003: 2003 年發(fā)布的在新的版本中總要有一些語法的變化。不同時期的數(shù)據(jù)這些標準就與JDK的版本一樣, 庫

15、對不同標準做了實現(xiàn)。雖然SQL可以用在所有關系型數(shù)據(jù)庫中,但很多數(shù)據(jù)庫還都有標準之后的一些語法,我們可以稱之為“方言”。例如MySQL中的LIMIT語句就是MySQL獨有的方言,其它數(shù)據(jù)庫都 不支持!當然, Oracle或SQL Server都有自己的方言。語法要求SQL語句可以單行或多行書寫,以分號結尾; 可以用空格和縮進來來增強語句的可讀性; 關鍵字不區(qū)別大小寫,建議使用大寫;2分類DDL( Data DefinitionLanguage):數(shù)據(jù)定義語言,用來定義數(shù)據(jù)庫對象:庫、列等;DML( Data Manipulation Language):數(shù)據(jù)操作語言,用來定義數(shù)據(jù)庫記錄表、(數(shù)

16、據(jù));3 DDL基本操作查看所有數(shù)據(jù)庫名稱: 切換數(shù)據(jù)庫:SHOW DATABASESUSE mydb1,切換到 mydb1數(shù)據(jù)庫;操作數(shù)據(jù)庫CREATE DATABASE NOT EXISTS mydb1 ;CREATE DATABASE mydb1創(chuàng)建一個名為 mydb1的數(shù)據(jù)庫。創(chuàng)建數(shù)據(jù)庫:創(chuàng)建數(shù)據(jù)庫,例如:個數(shù)據(jù)已經(jīng)存在,那么會報錯。例如CREATEDATABASEF NOTEXISTS mydb1,在名為 mydb1的數(shù)據(jù)庫不存在時創(chuàng)建該庫,這樣可以避免報錯。如果這刪除數(shù)據(jù)庫: 刪除數(shù)據(jù)庫,例如: 庫不存在,那么會報錯。 報錯。DROP DATABASE IF EXISTS mydb

17、1 ;DROP DATABASE myd,刪除名為 mydb1的數(shù)據(jù)庫。如果這個數(shù)據(jù)DROP DATABASE IF EXISTS mydb1 就算 mydb1 不存在,也不會的修改數(shù)據(jù)庫編碼:修改數(shù)據(jù)庫 mydb1的編碼為utf8。注意,在 MySQ沖所有的UTF-8編碼都不能使用中 間的“-”,即UTF-8要書寫為UTF8ALTER DATABASE mydbl CHARACTER SET utf8數(shù)據(jù)類型MySQL與 Java 樣,也有數(shù)據(jù)類型。MySQL中數(shù)據(jù)類型主要應用在列上。常用類型:int :整型double :浮點型,例如double(5,2)表示最多5位,其中必須有2位小數(shù),

18、即最大 值為;decimal :泛型型,在表單錢方面使用該類型,因為不會出現(xiàn)精度缺失問題;char :固定長度字符串類型;varchar :可變長度字符串類型;text :字符串類型;blob :字節(jié)類型;date :日期類型,格式為:yyyy-MM-dd ;time :時間類型,格式為:hh:mm:sstimestamp :時間戳類型;操作表2.3.4.創(chuàng)建表:CREATE TABLE表名(列名列類型,列名列類型,);例如:CREATE TABLE stu(sid CHAR(6),sn ameVARCHAR(20),ageINT,genderVARCHAR(10);再例如:CREATE TA

19、BLE emp(eidCHAR(6),en ameVARCHAR(50),ageINT,genderVARCHAR(6),birthdayDATE,hiredateDATE,salaryDECIMAL(7,2),resumeVARCHAR(1000);查看當前數(shù)據(jù)庫中所有表名稱:SHOW TABLES查看指定表的創(chuàng)建語句:SHOW CREATE TABLE emF查看emp表的創(chuàng)建語句;查看表結構:DESC emp查看emp表結構;刪除表:DROP TABLE emp刪除emp表;修改表:1.修改之添加列:給 Stu表添加class name列:ALTER TABLE stu ADD (cla

20、ss name varchar(100);修改之修改列類型:修改 stu表的gender列類型為CHAR(2):ALTER TABLE stu MODIFY gender CHAR(2);修改之修改列名:修改 stu表的gender列名為sex:ALTER TABLE stu cha nge gen der sex CHAR(2);修改之刪除列:刪除 stu表的class name列:ALTER TABLE stu DROP class name;5.修改之修改表名稱:修改Stu表名稱為student :ALTER TABLE stu RENAME TO stude nt;4 DML插入數(shù)據(jù)語

21、法:INSERT INTO表名(列名1,列名2,)VALUES(值1,值2)INSERT INTO stu(sid, sname,age,gender) VALUES(s_1001, zhangSan, 23, male);INSERT INTO stu(sid, sname) VALUES(s_1001, zhangSan);語法:INSERT INTO 表名 VALUES(值 1,值 2,)因為沒有指定要插入的列,表示按創(chuàng)建表時列的順序插入所有列的值:INSERT INTO stu VALUES(s_1002, liSi, 32, female);注意:所有字符串數(shù)據(jù)必須使用單引用!修改數(shù)

22、據(jù)語法:UP DATE表名 SET列名 仁值1, 列名n=值n WHERE條件UP DATE stu SET sn ame= zha ngSa nSaH ,age= 32 , ge nder= female WHERsid= s_1001;UP DATE stu SET sn ame= liSi , age= 20 WHERE age50 AND gen der= male;UP DATE stu SET sn ame= wa ngWu , age= 30 WHERE age60 OR gen der= female ;UP DATE stu SET gen der= female WHERE

23、 gender IS NULLUP DATE stu SET age=age+1 WHERE sn amXhaoLiu ;up date person set gen der=男where id=2;刪除數(shù)據(jù)語法:DELETE FROM名WHERE 條件DELETE FROM stu WHERE sid=s_1001 003BDELETE FROM stu WHERE sn ame=he nQi OR age 30;DELETE FROM stu;語法:TRUNCATE TABL表名TRUNCATE TABLE stu;DELETE的效率沒雖然TRUNCAT和DELETE都可以刪除表的所有記錄

24、,但有原理不同。有 TRUNCATETRUNCAT其實屬性刪除的記錄是無法回滾的,數(shù)據(jù)查詢語法(DQLDDL語句,因為它是先 DROPTABLE 再 CREATETABLE 而且 TRUNCATE 但DELETED除的記錄是可以回滾的(回滾是事務的知識!)。DQL就是數(shù)據(jù)查詢語言,數(shù)據(jù)庫執(zhí)行DQL語句不會對數(shù)據(jù)進行改變,而是讓數(shù)據(jù)庫發(fā)送結果集給客戶端。要查詢的列名稱*/要查詢的表名稱*/ 行條件*/語法:SELECT selection list /*FROM table_list /*WHERE con dition /*GROUP BY grouping_columns /*對結果分組 *

25、/HAVING condition /*分組后的行條件*/ORDER BY sorting_columns /*對結果分組 */LIMIT offset_start, row_count /*結果限定 */創(chuàng)建名:VARCHAR(50),INT,VARCHAR(50)學生表:stusidchar(6)學生學號sn amevarchar(50)學生姓名ageint學生年齡gendervarchar(50)學生性別字段類型說明CREATE TABLE stu ( sid CHAR(6), sn ameagegender)INSERT INTO stu VALUES(S_1001, liuYi, 3

26、5, male);INSERT INTO stu VALUES(S_1002, che nEr, 15, female);INSERT INTO stu VALUES(S_1003, zha ngSa n, 95, male);INSERT INTO stu VALUES(S_1004, liSi, 65, female);INSERT INTO stu VALUES(S_1005, wa ngWu, 55, male);INSERT INTO stu VALUES(S_1006, zhaoLiu, 75, female);INSERT INTO stu VALUES(S_1007, sun

27、Qi, 25, male);INSERT INTO stu VALUES(S_1008, zhouBa, 45, female);INSERT INTO stu VALUES(S_1009, wuJiu, 85, male);INSERT INTO stu VALUES(S_1010, zhe ngShi, 5, female);INSERT INTO stu VALUES(S 1011, xxx, NULL, NULL);雇員表:emp字段名稱字段類型說明empnoint員工編號en amevarchar(50)員工姓名jobvarchar(50)員工工作mgrint領導編號hiredate

28、date入職日期saldecimal(7,2)月薪commdecimal(7,2)獎金deptnoint部分編號CREATE TABLE emp( empnoen ame job mgr hiredate salcomm deptno);INT,VARCHAR(50),VARCHAR(50),INT,DATE,DECIMAL(7,2), decimal(7,2), INTINSERT INTO emp values(7369,SMITH,CLERK,7902,1980-12-17,800,NULL,20);INSERT INTO emp values(7499,ALLEN,SALESMAN,7

29、698,1981-02-20,1600,300,30);INSERT INTO emp values(7521,WARD,SALESMAN,7698,1981-02-22,1250,500,30);INSERT INTO emp values(7566,JONES,MANAGER,7839,1981-04-02,2975,NULL,20); INSERTINTO emp values(7654,MARTIN,SALESMAN,7698,1981-09-28,1250,1400,30);INSERT INTO emp values(7698,BLAKE,MANAGER,7839,1981-05-

30、01,2850,NULL,30);INSERT INTO emp values(7782,CLARK,MANAGER,7839,1981-06-09,2450,NULL,10);INSERT INTO emp values(7788,SCOTT,ANALYST,7566,1987-04-19,3000,NULL,20);INSERT INTO emp values(7839,KING, PRESIDENT,NULL,1981-11-17,5000,NULL,10);INSERT INTO emp values(7844,TURNER,SALESMAN,7698,1981-09-08,1500,

31、0,30);INSERT INTO emp values(7876,ADAMS,CLERK,7788,1987-05-23,1100,NULL,20);INSERT INTO emp values(7900,JAMES,CLERK,7698,1981-12-03,950,NULL,30);INSERT INTO emp values(7902,FORD,ANALYST,7566,1981-12-03,3000,NULL,20);INSERT INTO emp values(7934,MILLER,CLERK,7782,1982-01-23,1300,NULL,10);部分表:de pt字段名稱

32、字段類型deptno dn ameintlocvarchar(50)varchar(50)說明部分編碼部分名稱部分所在地點INT, varchar(14), varchar(13)CREATE TABLE dept( deptno dn ame loc);INSERT INTO dep t values(10, ACCOUNTING, NEW YORK);INSERT INTO dep t values(20, RESEARCH, DALLAS);INSERT INTO dep t values(30, SALES, CHICAGO);INSERT INTO dep t values(40,

33、OP ERATIONS, BOSTON);1 基礎查詢查詢所有列SELECT * FROM stu;查詢指定列SELECT sid, sn ame, age FROM stu;2條件查詢條件查詢介紹條件查詢就是在查詢時給出 WHER子句,在WHER子句中可以使用如下運算符及關鍵字:、=、!=、 、 、 =、 、 =:BETWEEN AND IN(set);IS NULL;ANDORNOT查詢性別為女,并且年齡 50的記錄SELECT * FROM stuWHERE ge nder=female AND ge=20 AND age=40; 或者SELECT *FROM stuWHERE age

34、BETWEEN 20 AND 40;查詢性別非男的學生記錄SELECT *FROM stuWHERE gender!=male; 或者SELECT *FROM stuWHERE gendermale; 或者SELECT *FROM stuWHERE NOT gender=male;查詢姓名不為 null 的學生記錄SELECT *FROM stuWHERE NOT sname IS NULL; 或者SELECT *FROM stuWHERE sname IS NOT NULL;3 模糊查詢當想查詢姓名中包含 a 字母的學生時就需要使用模糊查詢了。 模糊查詢需要使用關鍵字 LIKE。查詢姓名由

35、5 個字母構成的學生記錄SELECT *FROM stuWHERE sname LIKE ;模糊查詢必須使用 LIKE 關鍵字。其中 “_”匹配任意一個字母, 5個“_”表示 5 個任 意字母。查詢姓名由 5 個字母構成,并且第 5 個字母為“ i ”的學生記錄SELECT *FROM stuWHERE sname LIKE 查詢姓名以“ z ”開頭的學生記錄SELECT *FROM stuWHERE sname LIKE z%; 其中“ %”匹配 0n 個任何字母。查詢姓名中第 2 個字母為“ i ”的學生記錄SELECT *FROM stuWHERE sname LIKE _i%;查詢姓名

36、中包含a”字母的學生記錄SELECT *FROM stuWHERE sname LIKE %a%;4 字段控制查詢?nèi)コ貜陀涗浫コ貜陀涗?兩行或兩行以上記錄中系列的上的數(shù)據(jù)都相同),例如emp表中sal字段就存在相同的記錄。當只查詢emp表的sal字段時,那么會出現(xiàn)重復記錄,那么想去除重復記錄,需要使用 DISTINCT:SELECT DISTINCT sal FROM emp;查看雇員的月薪與傭金之和因為sal和comm兩列的類型都是數(shù)值類型,所以可以做加運算。 如果sal或comm中有一個字段不是數(shù)值類型,那么會出錯。SELECT *,sal+comm FROM emp;comm列有很多

37、記錄的值為 NULL,因為任何東西與 NULL相加結果還是 NULL,所以結算 結果可能會出現(xiàn) NULL下面使用了把NULL轉換成數(shù)值0的函數(shù)IFNULL:SELECT *,sal+IFNULL(comm,0) FROM emp;給列名添加別名在上面查詢中出現(xiàn)列名為 sal+IFNULL(comm,0) ,這很不美觀,現(xiàn)在我們給這一列給出 一個別名,為 total :SELECT *, sal+IFNULL(comm,0) AS total FROM emp;給列起別名時,是可以省略AS關鍵字的:SELECT *,sal+IFNULL(comm,0) total FROM emp;5 排序查詢

38、所有學生記錄,按年齡升序排序SELECT *FROM stuORDER BY sage ASC;或者SELECT *FROM stuORDER BY sage;查詢所有學生記錄,按年齡降序排序SELECT *FROM stuORDER BY age DESC;查詢所有雇員,按月薪降序排序,如果月薪相同時,按編號升序排序SELECT * FROM empORDER BY sal DESC,e mpno ASC;6聚合函數(shù)聚合函數(shù)是用來做縱向運算的函數(shù):COUNT()統(tǒng)計指定列不為 NULL的記錄行數(shù);MAX():計算指定列的最大值,如果指定列是字符串類型,那么使用字符串排序運 算;MIN():計

39、算指定列的最小值,如果指定列是字符串類型,那么使用字符串排序運 算;0;0;SUM():計算指定列的數(shù)值和,如果指定列類型不是數(shù)值類型,那么計算結果為 AVG():計算指定列的平均值,如果指定列類型不是數(shù)值類型,那么計算結果為COUNT當需要縱向統(tǒng)計時可以使用COUNT。查詢emp表中記錄數(shù):SELECT COUNT(*) AS ent FROM emp;查詢emp表中有傭金的人數(shù):SELECT COUNT(comm) ent FROM emp;注意,因為count()函數(shù)中給出的是 comm列,那么只統(tǒng)計 comm列非NULL的行數(shù)。查詢emp表中月薪大于2500的人數(shù):SELECT COU

40、NT(*) FROM empWHERE sal 2500;統(tǒng)計月薪與傭金之和大于2500元的人數(shù):SELECT COUNT(*) AS ent FROM emp WHERE sal+IFNULL(comm,0) 2500;查詢有傭金的人數(shù),以及有領導的人數(shù):SELECT COUNT(comm), COUNT(mgr) FROM emp;SUM和 AVG當需要縱向求和時使用 sum()函數(shù)。 查詢所有雇員月薪和:SELECT SUM(sal) FROM emp;查詢所有雇員月薪和,以及所有雇員傭金和:SELECT SUM(sal), SUM(comm) FROM emp;查詢所有雇員月薪+傭金和

41、:SELECT SUM(sal+IFNULL(comm,0) FROM emp;統(tǒng)計所有員工平均工資:SELECT SUM(sal), COUNT(sal) FROM emp;或者SELECT AVG(sal) FROM emp;MAX和 MIN查詢最高工資和最低工資:SELECT MAX(sal), MIN(sal) FROM emp;分組查詢當需要分組查詢時需要使用 GRO UP B子句,例如查詢每個部門的工資和,這說明要使 用部分來分組。分組查詢查詢每個部門的部門編號和每個部門的工資和:SELECT deptno, SUM(sal)FROM empGRO UP BY deptn o;查詢

42、每個部門的部門編號以及每個部門的人數(shù):SELECT deptno ,COUNT(*)FROM empGRO UP BY deptn o;1500的人數(shù):查詢每個部門的部門編號以及每個部門工資大于SELECT deptno ,COUNT(*)FROM empWHERE sal1500GRO UP BY de ptno;HAVING子句查詢工資總和大于 9000的部門編號以及工資和:SELECT deptno, SUM(sal)FROM empGRO UP BY deptnoHAVING SUM(sal) 9000;注意,WHER是對分組前記錄的條件,如果某行記錄沒有滿足WHER子句的條件,那么這

43、行記錄不會參加分組;而HAVING是對分組后數(shù)據(jù)的約束。8 LIMITLIMIT用來限定查詢結果的起始行,以及總行數(shù)。查詢5行記錄,起始行從 0開始SELECT * FROM emp LIMIT 0, 5;注意,起始行從0開始,即第一行開始!查詢10行記錄,起始行從 3開始SELECT * FROM emp LIMIT 3, 10;分頁查詢0,一共查詢 10,一共查詢 20,一共查詢?nèi)绻豁撚涗洖?0條,希望查看第 3頁記錄應該怎么查呢10行;10 行;10 行;第一頁記錄起始行為第二頁記錄起始行為第三頁記錄起始行為多表連接查詢連接查詢內(nèi)連接外連接左外連接右外連接全外連接(MySQl不支持)

44、自然連接子查詢連接查詢連接查詢就是求出多個表的乘積,例如t1連接t2,那么查詢出的結果就是t1*t2。積為(a,0),(a,1),(a,2),(b,0),(b,1),(b,2),則兩個集合的笛卡爾 ??梢詳U展到多個集合的情況。那么多表查詢產(chǎn)生這樣的結果并不是我們想要的,那么怎么去除重復的, 不想要的記錄呢,當然是通過條件過濾。 通常要查詢的多個表之間都存在關聯(lián)關系, 那么就通過關聯(lián)關系 去除笛卡爾積。你能想像到emp和dept表連接查詢的結果么 emp共14行記錄,dept表一共4行記 錄,那么連接后查詢出的結果是56行記錄。也就你只是想在查詢 emp表的同時,把每個員工的所在部門信息顯示出來

45、,那么就需要使用主外鍵來去除無用信息了。使用主外鍵關系做為條件來去除無用信息SELECT * FROM emp ,de pt WHERE =;也許你不需要那么多列,這時就可以指上面查詢結果會把兩張表的所有列都查詢出來, 定要查詢的列了。SELECT ,FROM emp, de pt WHERE =;還可以為表指定別名,然后在引用列時使用別名即可。SELECT ,FROM emp AS e,de pt AS dWHERE =;內(nèi)連接SQL上面的連接語句就是內(nèi)連接,但它不是SQL標準中的查詢方式,可以理解為方言!標準的內(nèi)連接為:SELECT *FROM emp eINNER JOIN dept d

46、 ON =;內(nèi)連接的特點:查詢結果必須滿足條件。例如我們向emp表中插入一條記錄:SO-101 弓弦三保漕靈1009 1999-12-31 SOOOiOOOj 200i00*00其中deptno為50,而在dept表中只有10、20、30、40部門,那么上面的查詢結果中 就不會出現(xiàn)“張三”這條記錄,因為它不能滿足=這個條件。外連接(左連接、右連接)外連接的特點:查詢出的結果存在不滿足條件的可能。 左連接:SELECT * FROM emp eLEFT OUTER JOIN dept dON =;左連接是先查詢出左表 (即以左表為主),然后查詢右表,右表中滿足條件的顯示出來, 不滿足條件的顯示

47、NULL這么說你可能不太明白,我們還是用上面的例子來說明。其中emp表中“張三”這條記錄中,部門編號為50,而de pt表中不存在部門編號為 50的記錄,所以“張三”這條記錄, 不能滿足=這條件。但在左連接中,因為emp表是左表,所以左表中的記錄都會查詢出來,即“張三”這條記錄也會查出,但相應的右表部分顯示NULL右連接右連接就是先把右表中所有記錄都查詢出來,然后左表滿足條件的顯示,不滿足顯示NULL例如在de pt表中的40部門并不存在員工,但在右連接中,如果de pt表為右表,那么還是會查出40部門,但相應的員工信息為NULLSELECT * FROM emp eRIGHT OUTER J

48、OIN dept d ON =;連接查詢心得:連接不限與兩張表,連接查詢也可以是三張、四張,甚至 N張表的連接查詢。通常連接 查詢不可能需要整個笛卡爾積,而只是需要其中一部分,那么這時就需要使用條件來去除不 需要的記錄。這個條件大多數(shù)情況下都是使用主外鍵關系去除。兩張表的連接查詢一定有一個主外鍵關系,三張表的連接查詢就一定有兩個主外鍵關 系,所以在大家不是很熟悉連接查詢時,首先要學會去除無用笛卡爾積,那么就是用主外鍵 關系作為條件來處理。如果兩張表的查詢,那么至少有一個主外鍵條件,三張表連接至少有 兩個主外鍵條件。自然連接大家也都知道,連接查詢會產(chǎn)生無用笛卡爾積,我們通常使用主外鍵關系等式來去除它。 而自然連接無需你去給出主外鍵等式,它會自動找到這一等式:emp和dept 表都存在兩張連接的表中名稱和類型完成一致的列作為條件,例如 deptno列,并且類型一致,所以會被自然連接找到!當然自然連接還有其他的查找條件的方式,但其他方式都可能存在問題!SELECT * FROM emp NATURAL JOIN dept;SELECT * FROM emp NATURAL LEFT JOIN dept;SE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論