單表查詢、多表查詢和子查詢,舊


舊,

 

查詢語句類型: 
  簡單查詢 
  多表查詢 
  子查詢(嵌套查詢) 

查詢語法:

  SELECT 
       [ DISTINT ]       :過濾掉重復的行
       field_name     :field_name為字段名,選擇要查詢的列

    FROM  table_name    :database_name為數據庫名,選擇要查詢的數據表
  [ WHERE  condition ]     : condition 為查詢條件,只有滿足where后面條件,才將相應就結果輸出
      
  [ ORDER BY filed_name  [ASC|DESC]  ] :filed_name為字段名, 以指定的列排序, ASC 升序(默認),DESC降序
  [ HAVING condition ]     :  condition 為查詢條件, having 只能和group by 一起使用,用於對分組結果過濾
  [ LIMIT  [offset,]Count ]     : [offset,]Count      從第offset行開始顯示(注意第一行為0),顯示count行

 

簡單查詢

1.SELECT * FROM tb_name;      * 代表所有列,如果只輸出指定字段,則把“* ” 代替為指定字段名
  查詢tb_book表中的所有數據:select * from tb_book ;
   

2. SELECT field1,field2 FROM tb_name; 只輸出指定字段稱為 投影
  只查詢tb_book表中id和 books 的字段: select id,books from tb_book ;
    

3.SELECT * FROM tb_name WHERE 條件; 只輸出符合條件的行稱為 選擇
    查看tb_book表中sort列的值是基礎類的記錄: select * from tb_book where  sort='基礎類' ;

DISTINCT 相同的值只顯示一次(過濾掉重復的行)
查詢tb_book表中sort字段有幾種類型:  select distinct sort from tb_book ;(注意用distinct 過濾掉重復的行)

  不加distinct的結果如下:

 

WHERE子句:后面跟布爾關系表達式 

 SELECT * FROM tb_name WHERE 條件
    比較運算符:
      1.   =、>、>=、<=、< 數值比較不加引號,字符串比較加引號 
       例如: select * from tb_book where  sort='基礎類' ;   查看tb_book表中sort列的值是基礎類的記錄: 

  

    2.  BETWEEN 值1 AND 值2 :在值1和值2(包括值1和值2) 之間則匹配
      查詢出tb_book表中id列的值在20~30中間的記錄:select * from tb_book where id between 20 and 30  ;
 

    3. LIKE ‘’
      
 %: 匹配任意長度任意字符
        _:匹配任意單個字符

    4. REGEXP, RLIKE 支持正則表達式
    5. IN ("value1" ,"value2"……) 在列表中的任意一個,則匹配
    6. IS NULL       判斷是否為空,為空則匹配
    7. IS NOT NULL     判斷是否不為空,不為空則匹配

   邏輯運算符: 
    1. AND    同時滿足所有條件
    2. OR      滿足任意一個條件
    3. NOT    不滿足指定條件,則匹配

ORDER BY field_name {ASC|DESC}     : 查詢結果排序(ASC升序,DESC降序) ,默認為ASC
    語法: select 列名 from 表名  order by 以那個列排序  [ASC|DESC]

 

字段別名:AS 
select name as student_name from student; 顯示時顯示為student_name不是name

 

LIMIT子句:
LIMIT [offset,]Count      從第offset開始顯示(注意第一行為0),顯示count個

聚合:
SUM(), 求某個字段值的總和 
MIN(),求某個字段值的最小值
MAX(), 求某個字段值的最大值
AVG(), 求某個字段值的平均值
COUNT() 返回所選列中非NULL值的行的數目

GROUP BY: 分組 
HAVING 條件(having 只能和group by 一起使用,用於對分組結果過濾)

 

執行次序如圖所示

 

多表查詢:

連接:
    交叉連接(笛卡爾乘積)::用一個表中的每一行與另一個表中的每一行相連接
            select * from 表名1,表名2
            或者
            select * from
表名1 cross join 表名2

自然連接(內連接):將兩種表中相應字段的值逐一比較,只列出那些等值關系的行 
          select * from 表名1,表名2 where
表名1.字段名= 表名2.字段名
          或者
          select * from
表名1 inner join 表名2 表名1.字段名= 表名2.字段名  
 

外連接:
    左外連接:select 字段名 from 表名1 LEFT JOIN 表名2 ON 表名1.字段名= 表名2.字段名
        返回除內連接的數據外,還包括左表中不符合條件的數據,(也就是說左外連接包括左表的所有數據)並在右表的相應列添加空 右外連接:
select 字段名 from 表名1 RIGHT JOIN 表名2 ON 表名1.字段名= 表名2.字段名
       
返回除內連接的數據外,還包括右表中不符合條件的數據,(也就是說右外連接包括右表的所有數據)並在左表的相應列添加空
   
自連接(表必須使用別名): 

子查詢: 

    在外面一層的查詢中使用里面一層查詢產生的結果,當遇到多層查詢時,mysql從最內層的查詢開始,然后從它開始向外向上移動到外層(主)查詢,在這個過程中每個查詢產生的結果集都被賦給包圍它的父查詢

1.比較操作中使用子查詢:子查詢只能返回單個值; 

  語法: select  列名  from 表名 where  字段名  比較運算符  (子查詢)  
      比較運算符包括 =,!=,>,>=,<,<=。
      注意:用"()" 括住子查詢,只有子查詢的結果只能返回一個值,比較運算符才適用
     

2.IN()中使用子查詢:假如一個子查詢返回結果有多個,這時比較運算符就必須用關鍵字IN代替

   語法: select  列名  from 表名 where  字段名  in (子查詢)
        注意:用"()" 括住子查詢,子查詢的結果可以有多個    

   
3.帶關鍵字EXISTS的子查詢: 使用關鍵字exists時,內查詢語句不返回查詢的記錄,而是返回一個真假值,如果內查詢語句查詢到滿足條件的記錄,就返回一個真值(True),否則       將返回一個假值(false)。當返回的值為true時,外查詢語句將進行查詢,當返回的值為false時,外查詢語句就不進行查詢或查詢不出任何記錄。

    語法:  select  列名  from 表名  where exists  (子查詢) 
        注意:用"()" 括住子查詢, NOT EXISTS 剛好與EXISTS 相反.

4.帶關鍵字ANY的子查詢:any 表示滿足其中任意一個條件。使用關鍵字any時,只要滿足內查詢語句返回的結果中的任意一個,就可以通過該條件執行外查詢 
     select  列名  from 表名 where  字段名  比較運算符 any (子查詢)

5..帶關鍵字ALL的子查詢:all表示滿足所有條件。使用關鍵字all時,只有滿足內查詢語句返回的所有結果,才可以執行外查詢 
     select  列名  from 表名 where  字段名  比較運算符 all  (子查詢)

 

聯合查詢:聯合查詢結果是將多個select 語句的查詢結果合並到一起,

  關鍵字UNION:將所有的查詢結果合並到一起 ,然后去除相同的記錄
  關鍵字UNION ALL:只是簡單將結果和並到一起

(select 1)   UNION (select  2); 將兩個查詢結果合並起來

視圖: 存儲下來的SELECT語句;(在MySQL中用處不大,跟安全相關時有意義) 
基於基表的查詢結果;

CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = { user | CURRENT_USER }]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]  

顯示創建某個表、視圖、數據庫等用了什么語句

SELECT CREATE {DATABASE | TABLE | VIEW} NAME    

廣義查詢: 

DML: 
DELETE 
INSERT INTO 
UPDATE

INSERT INTO tb_name (col1, col2, ...) VALUES (val1, val2, ...)[,(val1, val2, ...),...]
INSERT INTO tb_name SET col1= ,col2= ,....
INSERT INTO tb_name (col1,col2...) SELECT ....
字符型:單引號
數值型:不需要引號
日期時間型:
空值:NULL, ''

REPLACE INTO 與INSERT類似

DELETE: 
    DELETE FROM tb_name WHERE condition;
TRUNCATE tb_name: 清空表,並重置AUTOINCREMENT計數器;

UPDATE tb_name SET col1=..., col2=... WHERE 

原文來自 http://www.cnblogs.com/xiaonengsho/p/8567937.html 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM