天天看點

MySQL常用sql語句-----資料表的查詢操作常用的sql語句如下,應對工作足以

常用的sql語句如下,應對工作足以

1.查詢指定字段

select c_id,c_age,c_name from t_student;

select c_id as 編号,c_name as 姓名,c_age 性别 from t_student;

2.去重查詢

select distinct c_address from t_student

select distinct c_address,c_name from t_student

3.比較運算符查詢

select c_name,c_gender from t_student where c_gender ="女 ";

select c_id ,c_name,c_age,c_gender from t_student where c_age <>18;

4.邏輯運算符查詢

select c_name,c_age,c_gender from t_student where c_gender = "女" and c_age <20;

select c_name,c_age from t_student where c_age =18 or 20;   # 有問題.會産生注入問題

select c_name ,c_age from t_student where not c_age = 18;   # not一般用在非空的地方

5.模糊查詢

like

%: 表示任意多個字元

_: 表示任意一個字元

select c_id,c_name from t_student where c_name like "孫";

select c_id,c_name from t_student where c_name like "孫_";

select c_id,c_name from t_student where c_name like "%三%";

6.範圍查詢

in:非連續 / between:連續

select c_id,c_name from t_student where c_id in (1,5,8,23,7,12,100000);

select c_name,c_age from t_student where c_age between 18 and 20; # 包括18和20

7.判空

select c_name,c_age from t_student where c_age is Null;

select c_name,c_age from t_student where c_age is not Null;

8.查詢結果排序 order by

select c_name ,c_id,c_age from t_student order by c_age; # 預設升序

select c_name ,c_id,c_age from t_student where c_gender = "女" order by c_age desc; # 降序

9.分頁查詢

select c_id ,c_name from t_student limit 10,10; # 從11開始 20結束

select c_id ,c_name from t_student limit 30,10; # 從31開始 40結束

-- 每頁顯示2個,第3個頁面

select * from students limit 4,2;

-- 每頁顯示m個,第n個頁面

select * from students limit   m(n-1),m;

10.聚合函數 # 很少單獨用,一般結合分組一起用

select sum(c_age) from t_student;

select sum(c_age),avg(c_age),max(c_age),min(c_age),count(*) from t_stuudent where c_gender = "女"

11.分組:

  1. where....group by....having: 先經過where大篩選,再.group by分組,再對分組的結果用having限制查詢

  2.單分組沒有意義,相當于去重,往往結合:group_concat(c_name)使用

  3.having中like查詢不再适用,隻能配合group by 使用

單字段分組:

  select c_gender from t_student group by c_gender;

多字段分組: having 對group分組後進行篩選

  select c_address,c_gender from t_student group by c_gender,c_address;

  select c_address,c_gender,group_concat(c_name) from t_student group by c_gender,c_address   having c_gender = "女"; <====>select c_address,c_gender,group_concat(c_name) from t_student   where c_gender ="女"group by c_gender,c_address;

例1:mysql> select c_address,c_name from t_student group by c_address,c_name having c_gender = "女";

ERROR 1054 (42S22): Unknown column 'c_gender' in 'having clause'

注意1:having用在group by分組後,但是分組後并沒有 c_gender這一字段

12.多表查詢

沒外鍵的時候:不會連接配接c_class_id為空的資料

select s.c_name,c.c_name from t_student as s,t_class as c where s.c_class_id = c.c_id;

  1.内連接配接:on

  """注意:資料庫預設為内連接配接,也可以不寫inner join 用,隔開2個表但是連接配接方式需要用where

    但是不能再接where了

    即:t_a , t_b where 連接配接關系; <=====> t_a inner join t_b on 連接配接關系 [+where]

    這裡有where=情況下先執行where語句

  """

    select s.c_name,c.c_name from t_student s inner join t_class c on s.c_class_id = c.c_id where c_gender = "女";

  2.左連接配接:以左表為基準

    select s.c_name ,c.c_name from t_student s left join t_class c on s.c_class_id = c.c_id;

  3.右連接配接

    select s.c_name,c.c_name from t_student s right join t_class c on s.c_class_id =c.c_id;

    4.适用場景

     左A表  右B表

       如果 A>B且無包含關系 :right join

       如果 A<B且無包含關系 :left join

       如果 A>B且有包含關系 :inner join

       如果 A<B且有包含關系 :inner join

13.标量子查詢

  select c_name,c_age from t_student where c_age > (select avg(c_age) from t_student);

13-1列級子查詢: 結果為一列 (主查詢 where 條件 in )

例:查詢所有學生所在班級的班級名稱

第一步:抽取關鍵字:所有學生---->student表, 班級名稱---->class表

第二步:在student表中找出所有學生所在的教室id:select c_class_id from t_student

第三步:在class中根據這些教室id找出對應的教室名字(class表中可能不止這幾個教室)

  select c_name from t_class where c_id in (select c_class_id from t_student);

13-2行級子查詢 : 結果為一行 (主查詢 where (字段1,2,...) = (行子查詢))

例:查找班級裡 年齡最大 且 所在班号最小 的學生

第一步:抽取關鍵字 :年齡最大----->student表 , 所在班号最小的學生--->student表

第二步:選出最大年齡的學生和最小的班号:select max(c_age),min(c_class_id) from t_student

第三步:找出年齡和班号滿足條件的學生 :

如果所有學生中年齡最大的在2班,則找回的結果為空

  select * from t_student where (c_age,c_class_id) = (select max(c_age),min(c_class_id) from t_student);  # (c_age ,c_class_id )中的順序後後面select語句限制

<======>select * from t_student where (c_age = (select max(c_age) from t_student)) and (c_class_id = (select min(c_class_id) from t_student));

14.自連接配接查詢--省--市--區

在查詢資料時,隻有一張表,查詢時使用自己連接配接自己。 文法: select * from 表1 inner join 表2 on 表1.列 運算符 表2.列 where 條件;

1.查詢一共有多少個省

select count(*) from areas where pid is null;

2.查詢山西省的所有城市=====>要用到where 是以要用inner join ..on 文法

第一步:拆分表:省表(字段:aid ,atitle) 市表(字段:aid ,atitle,pid)

第二步:找出省表(p)中的山西省

第三步:分析表可知,省表中的aid = 市表(c)中的cid 即有所屬關系,并不是簡單的aid = pid

select c.* from areas as c inner join areas as p on c.pid = p.aid where p.atitle ="山西省"; # 必須是p.atitle

3.查詢市的名稱為“廣州市”的所有區縣

select qu.* from areas as qu inner join areas as c on c.aid = qu.pid where c.atitle ='廣州市';

如果你和我有共同愛好,我們可以加個好友一起交流哈!

MySQL常用sql語句-----資料表的查詢操作常用的sql語句如下,應對工作足以

繼續閱讀