1. 程式人生 > 實用技巧 >五、查詢資料

五、查詢資料

-- 查詢語法
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 排序的欄位或表示式;

特點

  1、asc代表的是升序,可以省略 desc代表的是降序

  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