基礎(chǔ)查詢
/*
語法:
select 查詢列表 from 表名
特點(diǎn):
1.查詢列表可以是:表中的字段樟遣、常量值淑翼、表達(dá)式塔粒、函數(shù)
2.查詢的結(jié)果是虛擬的表格
*/
-- 注意查詢之前含懊,要打開指定的庫身冬,use myemployees;
USE myemployees;
1.查詢表中的單個(gè)字段
SELECT last_name FROM employees;
2.查詢表中的多個(gè)字段
SELECT last_name,salary,email FROM employees;
3.查詢表中的所有字段
SELECT*FROM employees;
-- 順序和表中的字段一樣
4.查詢常量值
SELECT 100;
SELECT 'JOIN';
5.查詢表達(dá)式
SELECT 100*99;
6.查詢函數(shù)
SELECT VERSION();-- 8.0.11
起別名
/*
好處:
1.便于理解
2.如果要查詢的字段有重名的情況,使用別名可以區(qū)分開
*/
方式一 使用as
SELECT 100*77 AS 結(jié)果 haha;
SELECT last_name AS 姓,first_name AS 名 FROM employees;
方式二 使用空格
SELECT 100*77 結(jié)果 haha;
SELECT last_name 姓,first_name 名 FROM employees;
案例:查詢salary,顯示結(jié)果為out put
-- SELECT salary AS OUT put FROM employees;會(huì)報(bào)錯(cuò)
-- 因?yàn)閛ut是關(guān)鍵詞岔乔,所以酥筝,如果別名里面有關(guān)鍵詞的,請加雙引號雏门,或者單引號嘿歌。
SELECT salary AS "OUT put" FROM employees;
去重 DISTINCT
查詢員工表中涉及到的所有部門編號
SELECT DISTINCT department_id FROM employees;
+號的作用
/*
1.+號只有一個(gè)功能:運(yùn)算符。
select 100+90剿配; 這個(gè)做加法
2.SELECT NULL+10; --只要一方為NULL搅幅,則結(jié)果肯定是NULL。
*/
案例:查詢員工名和姓連接成一個(gè)字段呼胚,并顯示為姓名
-- 錯(cuò)誤?:SELECT last_name+first_name AS 姓名 FROM employees;
SELECT CONCAT(last_name,first_name) AS 姓名 FROM employees;
顯示結(jié)構(gòu) DESC
題:顯示departments的結(jié)構(gòu)茄唐,并查詢其中的全部數(shù)據(jù)
DESC departments;
SELECT * FROM departments;
顯示employees中的全部job_id,不能重復(fù)
SELECT DISTINCT job_id FROM employees;
顯示出表employees的全部列蝇更,各個(gè)列直接用逗號連接沪编,列頭顯示OUT_PUT
-- commission_pct有些值是NULL
-- 因?yàn)镹ULL和誰拼接都是NULL
-- 所以下面的結(jié)果可能為NULL
SELECT CONCAT(employee_id,',',first_name,',',last_name,",",commission_pct) AS "OUT_PUT" FROM employees;
SELECT IFNULL 判斷是否為空
SELECT IFNULL(commission_pct,0) AS 獎(jiǎng)金率,commission_pct FROM employees;
-- 上面題的做法:
SELECT CONCAT(employee_id,',',first_name,',',last_name,",",IFNULL(commission_pct,0)) AS "OUT_PUT" FROM employees;
條件查詢
/*
語法:
select 查詢列表 from 表名 where 篩選條件;
查詢列表可以是:表中的字段、常量值年扩、表達(dá)式蚁廓、函數(shù)
分類:
一。按條件表達(dá)式篩選
條件運(yùn)算符:> < = !=或者<> >= <=
二厨幻。按邏輯表達(dá)式篩選
邏輯運(yùn)算符:z
作用:連接條件表達(dá)式
&& || ! 或者 and or not
三相嵌。模糊查詢
like
BETWEEN AND
in
is null 或者 is not null
*/
按條件表達(dá)式篩選
案例一 查詢工資>12000的員工信息
SELECT * FROM employees WHERE salary>12000;
案例二 查詢部門編號不等于90的員工編號和部門編號
SELECT employee_id,department_id FROM employees WHERE department_id<>90;
按邏輯表達(dá)式篩選
案例一 查詢工資z在10000到20000之間的員工名腿时、工資、獎(jiǎng)金
SELECT last_name,salary,commission_pct
FROM employees
WHERE salary>=10000 AND salary<=20000;
案例二 查詢部門編號不在90到110之間饭宾∨悖或者工資高于15000的員工信息
SELECT * FROM employees WHERE department_id<90 or department_id >110 or salary>15000;
-- 或者寫成
SELECT * FROM employees WHERE NOt(department_id>=90 AND department_id <=110) or salary>15000;
模糊查詢
like
/*like 特點(diǎn):
一般和通配符搭配使用,
通配符
% :任意多個(gè)字符看铆,包含0個(gè)字符
_ :占一個(gè)字符
*/
案例一:查詢員工名中包含字符a的員工信息
-- %代表通配符
SELECT * FROM employees WHERE last_name LIKE '%a%';
案例二:查詢員工名中第三個(gè)字符為n徽鼎,第五個(gè)字符為l的員工名和工資
SELECT last_name,salary FROM employees WHERE last_name LIKE '__n_l%';
案例三:查詢員工名中第二個(gè)字符為_的員工名
-- \轉(zhuǎn)義字符
SELECT last_name FROM employees WHERE last_name LIKE '_%';
-- 或者 告訴系統(tǒng)%' ESCAPE '$';
BETWEEN AND
/*
1.使用between and 可以提高語句簡潔度
2.包好臨界值
3.前小后大,不能顛倒順序
*/
案例1:查詢員工編號在100到120之間的員工信息
SELECT * FROM employees WHERE employee_id>=100 AND employee_id<=120;
-- 或者
SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;
in
/*
含義:判斷某字段的值是否屬于in列表中的某一項(xiàng)
特點(diǎn):
1.in 比 or 簡潔
2.in列表的值類型必須是相同的或者兼容的
3.in列表的值不能使用通配符
*/
案例:查詢員工的工種編號是IT_PROG弹惦、AD_PRES否淤、AD_VP的一個(gè)員工名和工種編號
SELECT last_name,job_id FROM employees WHERE job_id='IT_PROG' or job_id='AD_PRES' or job_id='AD_VP';
-- 或者
SELECT last_name,job_id FROM employees WHERE job_id IN('IT_PROG' , 'AD_PRES' ,'AD_VP');
is null、is not null
/*
=或者<>不能用于判斷null值棠隐,所以只能用 is null和 is not null
*/
案例一:查詢沒有獎(jiǎng)金的員工名和獎(jiǎng)金率
SELECT last_name,commission_pct FROM employees WHERE commission_pct is null;
案例二:查詢有獎(jiǎng)金的員工名和獎(jiǎng)金率
SELECT last_name,commission_pct FROM employees WHERE commission_pct is not null;
安全等于 <=>
-- 安全等于作用:判斷是否等于石抡,包括null,如果等于返回true宵荒≈祝可讀性較低
-- is null :僅僅判斷null值,可讀性較高报咳。
案例一:查詢沒有獎(jiǎng)金的員工名和獎(jiǎng)金率
-- 直接寫=是不行的
SELECT last_name,commission_pct FROM employees WHERE commission_pct <=> null;
案例一:查詢工資為12000的員工信息
SELECT * FROM employees WHERE salary <=> 12000;
案例二:查詢員工號為176的員工的姓名和部門號和年薪
-- 注意這個(gè)IFNULL
SELECT last_name,department_id,salary12(1+IFNULL(commission_pct,0))
as 年薪
FROM employees
WHERE employee_id=176;
小測試
查詢沒有獎(jiǎng)金侠讯,且工資小于18000的salary,last_name
SELECT salary,last_name FROM employees WHERE commission_pct IS NULL AND salary<18000;
查詢employees表中暑刃,job_id不為‘IT’或者 工資為12000的員工的信息
SELECT * FROM employees WHERE job_id<>'IT' OR salary=12000;
查看部門表結(jié)構(gòu)
DESC departments;
產(chǎn)科部門表中涉及到哪些位置編號
SELECT DISTINCT location_id FROM departments;
請問:SELECT * FROM employees; 和 SELECT * FROM employees WHERE commission_pct like '%%' and last_name like '%%';結(jié)果是否一樣厢漩?并說明原因
SELECT * FROM employees WHERE commission_pct like '%%' and last_name like '%%';-- commission_pct有字段有null,and之后就是null了