表的查詢操作
查詢語法
select 【distinct】* form 表名
*代表所有列 ,查詢時儘量不用select *, 效率非常低
a)查詢某列
select 列名1,列名2 表名 from 表名
b)去重查詢 distinct筆試
select distinct 列名 from 表名
若加多個列名用逗號隔開,代表兩列資料都相同時才會去掉
c)對查詢的列進行算術運算
select 列名1+列名2 from 表名
d)對查詢結果重新命名 as 筆試
select 列名1+列名2 as ‘新名’ from 表名
as可省略
eg: select math+english+chinese as ’總成績’from student;
eg:將所有姓唐的學生總成績增加%60 --》先寫結果最後寫條件
select name,(chinese+math+english)*1.6 from student
where name like ’唐%’
%為萬用字元 表示找唐xx/ ’%唐’則是找xx唐
e)where 子句
比較運算子:between...and 閉區間查詢 in() 具體值查詢(列舉) like’’ not like’’ is null > < >= <= != 邏輯運算子:and or not
用as起的別名不能作為查詢的列名
f)排序
select * from [表名] order by [列名] asc/desc;
此處的order by 後的列名 可以引用別名
order by 語句要放在命令的最後.
g)分頁
select [列名] from [表名] where 條件 limit 啟始位置,記錄條數
select [列名] from [表名] where 條件 limit記錄條數 offset 起始位置
聚合函式
a)count 函式
select count(*)|count(列名) from [table_name] where condition
count(*)會統計一共的記錄數,count(列名)會排除為null的情況
b) sum函式返回滿足where條件的行的和
select sum(列名) {,sum(列名)...} from tbl_name [where condition]
sum僅對數值起作用,否則無意義
c)avg函式
select avg(列名) [,avg(列名),...] from tbl_name [where condition];
d) max/min函式返回滿足where條件的一列的大/小值
select max(列名) from tbl_name [where condition]
e) 對指定列進行分組
題中出現“每個”的字樣,一般需要用到分組。
select column1, column2, .. from table group by column;
having和group by配合使用,對group by結果進行過濾
select avg(sal) as myavg from EMP group by deptno having myavg<2000
多表查詢:
select column1, column2, .. from table1,table2 【where 條件】
若沒有where子句,直接用from 字句查詢兩個表,則是用的笛卡兒積查詢,這樣就有大量的重複內容,因此需要用where子句
兩個表中有列名相同的,則需要通過[表名].列名 指出需要用哪個表中的列名。
自查尋:
須在from後給表起別名,然後通過[別名.列名](select中也需這樣引用) 的方式呼叫列名
合併多個表的select執行結果
union 去重合並
union all 不去重合並
SQL查詢中各個關鍵字的執行先後順序== from > on> join > where > group by > with > having > select > distinct > order by > limit==