基本查詢(Select…From)
全表和特定列查詢
全表查詢
select * from emp;
選擇特定列查詢
select empno, ename from emp;
注意
(1)SQL 語言大小寫不敏感。
(2)SQL 可以寫在一行或者多行
(3)關鍵字不能被縮寫也不能分行
(4)各子句一般要分行寫。
(5)使用縮進提高語句的可讀性。
列別名
-
重命名一個列
-
便於計算
-
緊跟列名,也可以在列名和別名之間加入關鍵字‘AS’
-
案例實操 查詢名稱和部門
select ename AS name, deptno dn from emp;
算術運算符
運算符|描述 |:--:|:--:| A+B |A和B 相加 A-B |A減去B A*B |A和B 相乘 A/B |A除以B A%B| A對B取余 A&B |A和B按位取與 A|B|A和B按位取或 A^B| A和B按位取異或 ~A |A按位取反
案例實操
查詢出所有員工的薪水后加1顯示。
select sal +1 from emp;
常用函數
-
求總行數(count)
select count(*) cnt from emp;
-
求工資的最大值(max)
select max(sal) max_sal from emp;
-
求工資的最小值(min)
select min(sal) min_sal from emp;
-
求工資的總和(sum)
select sum(sal) sum_sal from emp;
-
求工資的平均值(avg)
select avg(sal) avg_sal from emp;
Limit語句
典型的查詢會返回多行數據。LIMIT子句用於限制返回的行數。
select * from emp limit 5;
Where語句
-
使用WHERE子句,將不滿足條件的行過濾掉
-
WHERE子句緊隨FROM子句 案例實操 查詢出薪水大於1000的所有員工
select * from emp where sal >1000;
比較運算符(Between/In/ Is Null)
下面表中描述了謂詞操作符,這些操作符同樣可以用於JOIN…ON和HAVING語句中。
操作符|支持的數據類型|描述 |:--:|:--:|:--:| A=B |基本數據類型| 如果A等於B則返回TRUE,反之返回FALSE A<=>B |基本數據類型 |如果A和B都為NULL,則返回TRUE,其他的和等號(=)操作符的結果一致,如果任一為NULL則結果為NULL A<>B,A!=B |基本數據類型 |A或者B為NULL則返回NULL;如果A不等於B,則返回TRUE,反之返回FALSE A<B |基本數據類型| A或者B為NULL,則返回NULL;如果A小於B,則返回TRUE,反之返回FALSE A<=B |基本數據類型 |A或者B為NULL,則返回NULL;如果A小於等於B,則返回TRUE,反之返回FALSE A>B |基本數據類型| A或者B為NULL,則返回NULL;如果A大於B,則返回TRUE,反之返回FALSE A>=B |基本數據類型 |A或者B為NULL,則返回NULL;如果A大於等於B,則返回TRUE,反之返回FALSE A [NOT] BETWEEN B AND C| 基本數據類型 |如果A,B或者C任一為NULL,則結果為NULL。如果A的值大於等於B而且小於或等於C,則結果為TRUE,反之為FALSE。如果使用NOT關鍵字則可達到相反的效果。 A IS NULL| 所有數據類型 |如果A等於NULL,則返回TRUE,反之返回FALSE A IS NOT NULL |所有數據類型 |如果A不等於NULL,則返回TRUE,反之返回FALSE IN(數值1, 數值2) |所有數據類型 |使用 IN運算顯示列表中的值 A [NOT] LIKE B| STRING 類型 |B是一個SQL下的簡單正則表達式,如果A與其匹配的話,則返回TRUE;反之返回FALSE。B的表達式說明如下:‘x%’表示A必須以字母‘x’開頭,‘%x’表示A必須以字母’x’結尾,而‘%x%’表示A包含有字母’x’,可以位於開頭,結尾或者字符串中間。如果使用NOT關鍵字則可達到相反的效果。 A RLIKE B, A REGEXP B| STRING 類型| B是一個正則表達式,如果A與其匹配,則返回TRUE;反之返回FALSE。匹配使用的是JDK中的正則表達式接口實現的,因為正則也依據其中的規則。例如,正則表達式必須和整個字符串A相匹配,而不是只需與其字符串匹配。
案例實操
-
查詢出薪水等於5000的所有員工
select * from emp where sal =5000;
-
查詢工資在500到1000的員工信息
select * from emp where sal between 500 and 1000;
-
查詢comm為空的所有員工信息
select * from emp where comm is null;
-
查詢工資是1500或5000的員工信息
select * from emp where sal IN (1500, 5000);
Like和RLike
-
使用LIKE運算選擇類似的值
-
選擇條件可以包含字符或數字: % 代表零個或多個字符(任意個字符)。 _ 代表一個字符。
-
RLIKE子句是Hive中這個功能的一個擴展,其可以通過Java的正則表達式這個更強大的語言來指定匹配條件。 案例實操 (1)查找以2開頭薪水的員工信息
select * from emp where sal LIKE '2%';
(2)查找第二個數值為2的薪水的員工信息
select * from emp where sal LIKE '_2%';
(3)查找薪水中含有2的員工信息
select * from emp where sal RLIKE '[2]';
邏輯運算符(And/Or/Not)
操作符|含義 |:--:|:--:| AND |邏輯並 OR |邏輯或 NOT| 邏輯否
案例實操 (1)查詢薪水大於1000,部門是30
`select * from emp where sal>1000 and deptno=30;`
(2)查詢薪水大於1000,或者部門是30
`select * from emp where sal>1000 or deptno=30;`
(3)查詢除了20部門和30部門以外的員工信息
` select * from emp where deptno not IN(30, 20);`
分組
Group By語句
GROUP BY語句通常會和聚合函數一起使用,按照一個或者多個列隊結果進行分組,然后對每個組執行聚合操作。
案例實操 (1)計算emp表每個部門的平均工資
`select t.deptno, avg(t.sal) avg_sal from emp t group by t.deptno;`
(2)計算emp每個部門中每個崗位的最高薪水
`select t.deptno, t.job, max(t.sal) max_sal from emp t group by t.deptno, t.job;`
Having語句
having與where不同點
-
where針對表中的列發揮作用,查詢數據;having針對查詢結果中的列發揮作用,篩選數據。
-
where后面不能寫分組函數,而having后面可以使用分組函數。
-
having只用於group by分組統計語句。 ** 案例實操**
-
求每個部門的平均薪水大於2000的部門求每個部門的平均工資
select deptno, avg(sal) from emp group by deptno;
-
求每個部門的平均薪水大於2000的部門