USE myemployees;#1.查詢表中的單個(gè)字段SELECT last_name FROM employees;#2.查詢表中的多個(gè)字段
SELECT last_name,salary,email FROM employees;#3.查詢表中的所有字段#方式一:
SELECT `employee_id`,`first_name`,`last_name`,`phone_number`,`last_name`,`job_id`,`phone_number`,`job_id`,`salary`,`commission_pct`,`manager_id`,`department_id`,`hiredate`
FROMemployees ;
#方式二: SELECT * FROM employees;#4.查詢常量值SELECT 100;SELECT 'john';#5.查詢表達(dá)式SELECT 100%98;#6.查詢函數(shù)SELECT VERSION();#7.起別名/*①便于理解②如果要查詢的字段有重名的情況,使用別名可以區(qū)分開來*/#方式一:使用as
SELECT 100%98 AS 結(jié)果;
SELECT last_name AS 姓,first_name AS 名 FROM employees;#方式二:使用空格
SELECT last_name 姓,first_name 名 FROM employees;#案例:查詢salary,顯示結(jié)果為 out put
SELECT salary AS "out put" FROM employees;#8.去重#案例:查詢員工表中涉及到的所有的部門編號(hào)
SELECT DISTINCT department_id FROM employees;#9.+號(hào)的作用/*java中的+號(hào):
①運(yùn)算符,兩個(gè)操作數(shù)都為數(shù)值型
②連接符,只要有一個(gè)操作數(shù)為字符串mysql中的+號(hào):
僅僅只有一個(gè)功能:運(yùn)算符select 100+90; 兩個(gè)操作數(shù)都為數(shù)值型,則做加法運(yùn)算
select '123'+90;只要其中一方為字符型,試圖將字符型數(shù)值轉(zhuǎn)換成數(shù)值型如果轉(zhuǎn)換成功,則繼續(xù)做加法運(yùn)算
select 'john'+90; 如果轉(zhuǎn)換失敗,則將字符型數(shù)值轉(zhuǎn)換成0select null+10; 只要其中一方為null,則結(jié)果肯定為null*/#案例:查詢員工名和姓連接成一個(gè)字段,并顯示為 姓名# 10SELECT CONCAT('a','b','c') AS 結(jié)果;SELECT CONCAT(last_name,first_name) AS 姓名
FROMemployees;SELECT CONCAT(last_name,first_name) AS 姓名 FROM employees;#11.【補(bǔ)充】ifnull函數(shù)
#功能:判斷某字段或表達(dá)式是否為null,如果為null 返回指定的值,否則返回原本的值SELECT IFNULL(commission_pct,0) FROM employees;#12.【補(bǔ)充】isnull函數(shù)
#功能:判斷某字段或表達(dá)式是否為null,如果是,則返回1,否則返回0
案例:
#1. 下面的語句是否可以執(zhí)行成功
SELECT last_name , job_id , salary AS sal
FROM employees; #2.下面的語句是否可以執(zhí)行成功
SELECT * FROM employees; #3.找出下面語句中的錯(cuò)誤
SELECT employee_id , last_name,
salary * 12 AS "ANNUAL SALARY"
FROM employees;#4.顯示表departments的結(jié)構(gòu),并查詢其中的全部數(shù)據(jù)DESC departments;
SELECT * FROM `departments`;#5.顯示出表employees中的全部job_id(不能重復(fù))
SELECT DISTINCT job_id FROM employees;#6.顯示出表employees的全部列,各個(gè)列之間用逗號(hào)連接,列頭顯示成OUT_PUTSELECTCONCAT(`first_name`,',',`last_name`,',',`job_id`,',',IFNULL(commission_pct,0)) AS out_put
FROMemployees;
#一、按條件表達(dá)式篩選#案例1:查詢工資>12000的員工信息SELECT *
FROMemployees
WHEREsalary>12000;#案例2:查詢部門編號(hào)不等于90號(hào)的員工名和部門編號(hào)
SELECT last_name,department_id
FROMemployees
WHEREdepartment_id<>90;#二、按邏輯表達(dá)式篩選#案例1:查詢工資z在10000到20000之間的員工名、工資以及獎(jiǎng)金
SELECTlast_name,salary,commission_pct
FROMemployees
WHEREsalary>=10000 AND salary<=20000;
#案例2:查詢部門編號(hào)不是在90到110之間,或者工資高于15000的員工信息
SELECT*
FROMemployees
WHERENOT(department_id>=90 AND department_id<=110) OR salary>15000;#三、模糊查詢
/*
likebetween and
in
is null|is not null*/
#1.like
/*
特點(diǎn):
①一般和通配符搭配使用通配符:% 任意多個(gè)字符,包含0個(gè)字符_ 任意單個(gè)字符
*、#案例1:查詢員工名中包含字符a的員工信息select *
fromemployees
wherelast_name like '%a%';#abc
#案例2:查詢員工名中第三個(gè)字符為e,第五個(gè)字符為a的員工名和工資
selectlast_name,salary
FROMemployees
WHERElast_name LIKE '__n_l%';#案例3:查詢員工名中第二個(gè)字符為_的員工名SELECTlast_name
FROMemployees
WHERElast_name LIKE '_$_%' ESCAPE '$';
#2.between and
/*
①使用between and 可以提高語句的簡潔度
②包含臨界值
③兩個(gè)臨界值不要調(diào)換順序*/#案例1:查詢員工編號(hào)在100到120之間的員工信息SELECT*
FROMemployees
WHEREemployee_id >= 120 AND employee_id<=100;
#----------------------
SELECT*
FROMemployees
WHEREemployee_id BETWEEN 120 AND 100;#3.in
/*
含義:判斷某字段的值是否屬于in列表中的某一項(xiàng)
特點(diǎn):①使用in提高語句簡潔度②in列表的值類型必須一致或兼容③in列表中不支持通配符*/
#案例:查詢員工的工種編號(hào)是 IT_PROG、AD_VP、AD_PRES中的一個(gè)員工名和工種編號(hào)SELECTlast_name,job_id
FROMemployees
WHEREjob_id = 'IT_PROT' OR job_id = 'AD_VP' OR JOB_ID ='AD_PRES';#------------------SELECTlast_name,job_id
FROMemployees
WHEREjob_id IN( 'IT_PROT' ,'AD_VP','AD_PRES');#4、is null
/*
=或<>不能用于判斷null值
is null或is not null 可以判斷null值*/#案例1:查詢沒有獎(jiǎng)金的員工名和獎(jiǎng)金率
SELECTlast_name,commission_pct
FROMemployees
WHEREcommission_pct IS NULL;#案例1:查詢有獎(jiǎng)金的員工名和獎(jiǎng)金率
SELECTlast_name,commission_pct
FROMemployees
WHEREcommission_pct IS NOT NULL;#----------以下為×
SELECTlast_name,commission_pct
FROMemployeesWHERE salary IS 12000;#安全等于 <=>#案例1:查詢沒有獎(jiǎng)金的員工名和獎(jiǎng)金率
SELECTlast_name,commission_pct
FROMemployees
WHEREcommission_pct <=>NULL;#案例2:查詢工資為12000的員工信息
SELECTlast_name,salary
FROMemployeesWHERE salary <=> 12000;#is null pk <=>IS NULL:僅僅可以判斷NULL值,可讀性較高,建議使用
<=> :既可以判斷NULL值,又可以判斷普通的數(shù)值,可讀性較低
案例:
1. 查詢沒有獎(jiǎng)金,且工資小于18000的員工工資與姓名SELECT last_name, salary
FROM employees
WHERE
salary < 18000 AND commission_pct IS NULL;2. 查詢employees表中,job_id不為"IT"或者工資為12000的員工信息SELECT *
FROM employees
WHERE
job_id <> 'IT' OR salary=12000;3.查看部門departments表結(jié)構(gòu)DESC departments;4. 查看部門departments表中涉及到了哪些位置編號(hào)SELECTDISTINCT location_id
FROMdepartments;5.試問:select * from employees 和 select * from employees where commission_pct like '%%' and last_name like '%%';結(jié)果是否一樣?并說明原因不一樣!
如果判斷的字段有null值
排序查詢
語法: select 查詢列表 from 表名 【where ?篩選條件】 order by 排序的字段或表達(dá)式;
#1、按單個(gè)字段排序
SELECT * FROM employees ORDER BY salary DESC;#2、添加篩選條件再排序#案例:查詢部門編號(hào)>=90的員工信息,并按員工編號(hào)降序SELECT *
FROM employees
WHERE department_id>=90
ORDER BY employee_id DESC;#3、按表達(dá)式排序
#案例:查詢員工信息 按年薪降序SELECT *,salary*12*(1+IFNULL(commission_pct,0))
FROM employees
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;#4、按別名排序
#案例:查詢員工信息 按年薪升序SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 ASC;#5、按函數(shù)排序
#案例:查詢員工名,并且按名字的長度降序SELECT LENGTH(last_name),last_name
FROM employees
ORDER BY LENGTH(last_name) DESC;#6、按多個(gè)字段排序#案例:查詢員工信息,要求先按工資降序,再按employee_id升序
SELECT *
FROM employees
ORDER BY salary DESC,employee_id ASC;
案例:
1.查詢員工的姓名和部門號(hào)和年薪,按年薪降序 按姓名升序排序SELECTlast_name, department_id, salary*12*(1+IFNULL(commission_pct, 0)) AS 年薪
FROMemployees
ORDER BY 年薪 DESC, last_name ASC;2. 選擇工資不在8000到17000的員工姓名和工資,按工資降序排序SELECTlast_name, salary
FROMemployees
WHERE salary NOT BETWEEN 8000 AND 17000
ORDER BY salary DESC;3.查詢郵箱中包含e的員工信息,并先按郵箱的字節(jié)數(shù)降序排序,再按部門號(hào)升序排序SELECT*
FROMemployees
WHERE email like '%e%'
ORDER BY LENGTH(email) DESC, department_id ASC;