五、查詢資料
阿新 • • 發佈:2020-11-23
-- 查詢語法 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition> ORDER BY <order_by_condition> LIMIT<limit_condition>
機器對查詢語句的解讀
ROM <left_table> ON <join_condition> <join_type> JOIN <right_table> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition> select DISTINCT <select_list> ORDER BY<order_by_condition> LIMIT <limit_condition>
一、條件查詢
-- 語法: SELECT 查詢列表 FROM 表名 WHERE 篩選條件;
一、按條件表示式篩選 簡單條件運算子:> < = != <> >= <= 二、按邏輯表示式篩選 邏輯運算子: 作用:用於連線條件表示式 && || ! and or not &&和and:兩個條件都為true,結果為true,反之為false||或or: 只要有一個條件為true,結果為true,反之為false !或not: 如果連線的條件本身為false,結果為true,反之為false 三、模糊查詢 like between and in is null
二、排序查詢
-- 語法 SELECT 查詢列表 FROM 表名 WHERE 篩選條件 ORDER BY 排序的欄位或表示式;
特點
2、order by子句可以支援 單個欄位、別名、表示式、函式、多個欄位
3、order by子句在查詢語句的最後面,除了limit子句
三、分組查詢
-- 語法 SELECT 查詢列表 FROM 表 [ WHERE 篩選條件 ] GROUP BY 分組的欄位 [ORDER BY 排序的欄位 ] ;
特點: 1、和分組函式一同查詢的欄位必須是group by後出現的欄位 2、篩選分為兩類:分組前篩選和分組後篩選
針對的表 | 位置 | 連線的關鍵字 | |
---|---|---|---|
分組前篩選 | 原始表 | group by前 | where |
分組後篩選 | group by後的結果集 | group by後 | having |
四、連線查詢
分類: 按年代分類: sql92標準:僅僅支援內連線 sql99標準【推薦】:支援內連線+外連線(左外和右外)+交叉連線 按功能分類: 內連線: 等值連線 非等值連線 自連線 外連線: 左外連線 右外連線 全外連線 交叉連線
七中Join查詢
-- 測試資料 CREATE TABLE tbl_dept ( id INT (11) NOT NULL AUTO_INCREMENT, deptName VARCHAR (30) DEFAULT NULL, locadd VARCHAR (40) DEFAULT NULL , PRIMARY KEY(id) ) ENGINE=INNODB AUTO_INCREMENT =1 DEFAULT CHARSET =utf8; CREATE TABLE table_emp( id INT(11) NOT NULL AUTO_INCREMENT, NAME VARCHAR(30) DEFAULT NULL, deptid INT(11) DEFAULT NULL, PRIMARY KEY(id), KEY fk_dept_id (deptid ) #CONSTRAINT fk_dept_id FOREIGN KEY (deptid) REFERENCE tbl_dept (id) ) ENGINE=INNODB AUTO_INCREMENT =1 DEFAULT CHARSET =utf8; INSERT INTO tbl_dept(deptname,locadd) VALUES('HD',11); INSERT INTO tbl_dept(deptname,locadd) VALUES('HR',12); INSERT INTO tbl_dept(deptname,locadd) VALUES('MK',13); INSERT INTO tbl_dept(deptname,locadd) VALUES('MIS',14); INSERT INTO tbl_dept(deptname,locadd) VALUES('FD',15); INSERT INTO table_emp(NAME,deptid) VALUES('z3',1); INSERT INTO table_emp(NAME,deptid) VALUES('z4',1); INSERT INTO table_emp(NAME,deptid) VALUES('z5',1); INSERT INTO table_emp(NAME,deptid) VALUES('w5',2); INSERT INTO table_emp(NAME,deptid) VALUES('w6',2);
4.1、A、B表的共有
-- 語法:SELECT <selecet_list> FROM tbA A INNER JOIN tbB B ON A.key = B.key select * from table_emp m inner join tbl_dept d on d.id=m.deptid ;
4.2、A表的獨有加A、B表的共有
-- 語法:SELECT <selecet_list> FROM tbA A LEFT JOIN tbB B ON A.key = B.key select * from table_emp m left join tbl_dept d on d.id=m.deptid ;
4.3、B表的獨有加A、B表的共有
-- 語法:SELECT <selecet_list> FROM tbA A INNER JOIN tbB B ON A.key = B.key SELECT * FROM tbl_emp e RIGHT JOIN tbl_dept d ON e.deptid = d.id
4.4、A表的獨有
-- 語法:SELECT <selecet_list> FROM tbA A LEFT JOIN tbB B ON A.key = B.key WHERE B.key IS NULL SELECT * FROM tbl_emp e RIGHT JOIN tbl_dept d ON e.deptid = d.id WHERE e.deptid IS NULL
4.5、B表的獨有
-- 語法:SELECT <selecet_list> FROM tbA A RIGHT JOIN tbB B ON A.key = B.key WHERE A.key IS NULL SELECT * FROM tbl_emp e LEFT JOIN tbl_dept d ON e.deptid = d.id WHERE d.id IS NULL
4.6、A表的獨有+B表的獨有+A、B表的共有
-- 語法:SELECT <selecet_list> FROM tbA A FULL OUTER JOIN tbB B ON A.key = B.key SELECT * FROM tbl_emp e LEFT JOIN tbl_dept d ON e.deptid = d.id UNION SELECT * FROM tbl_emp e RIGHT JOIN tbl_dept d ON e.deptid = d.id
4.7、A表的獨有+B表的獨有
-- 語法:SELECT <selecet_list> FROM tbA A FULL OUTER JOIN tbB B ON A.key = B.key where A.key IS NULL OR B.key IS NULL SELECT * FROM tbl_emp e RIGHT JOIN tbl_dept d ON e.deptid = d.id WHERE e.deptid IS NULL UNION SELECT * FROM tbl_emp e LEFT JOIN tbl_dept d ON e.deptid = d.id WHERE d.id IS NULL
五、分頁查詢
應用場景:當要顯示的資料,一頁顯示不全,需要分頁提交sql請求
-- 語法: SELECT 查詢列表 FROM 表 [ JOIN TYPE JOIN 表 2 ON 連線條件 WHERE 篩選條件 GROUP BY 分組欄位 HAVING 分組後的篩選 ORDER BY 排序的欄位 ] LIMIT [ OFFSET, ] size ;
-
offset要顯示條目的起始索引(起始索引從0開始)
-
size 要顯示的條目個數
特點:
①limit語句放在查詢語句的最後
②公式 要顯示的頁數 page,每頁的條目數size