目? 錄
一、初始化
二、簡單查詢
1.部分語法規則
2.查詢一個字段
(1)查詢員工編號
(2)查詢員工姓名
3.查詢多個字段
(1)查詢員工編號、姓名
(2)查詢部門編號、名稱、位置?
4.查詢全部字段
(1)查詢薪資等級全部字段
?5.查詢時進行數學運算
(1)查詢員工姓名、年薪
6.查詢時起別名?
(1)查詢員工姓名、年薪
(2)查詢員工全部信息
三、條件查詢?
1.過濾條件
2.語法格式
3.等于/不等于
(1)查詢姓名為“JONES”的員工信息
(2) 查詢位置不在“NEW YORK”的部門信息
4.大于等于/小于等于/大于/小于
(1)查詢月薪 2000 以上的員工姓名和薪資
(2)查詢最低薪資低于 1400 的薪資等級信息
5.and/between…and…/or
(1)查詢薪資在 1600~2500 之間的員工信息
(2)查詢職位是“CLERK”或“SALESMAN”的員工信息
(3)and 和 or 優先級
?6.is null/is not null
(1)查詢沒有津貼的員工信息
7.in/not in
(1)查詢職位是“ANALYST”、“PRESIDENT”、“MANAGER”的員工信息
(2)是否忽略 null
8.模糊查詢
(1)查詢姓名以 S 開頭的員工信息?
(2)查詢姓名以 T 結尾的員工信息
(3)查詢姓名第二個字母是 A 的員工信息
一、初始化
? ? ? ? 查詢語句屬于 SQL 語句中的 DQL(數據查詢語言),用于從數據庫中檢索數據,并將結果返回。由 SELECT(查詢內容)、FROM(查詢對象)、WHERE(查詢條件)、ORDER BY(排序方式)、GROUP BY(分組方式)等組成。
? ? ? ? ?那么,在開始前,先準備一個 sql 腳本來初始化數據庫信息,代碼如下:
DROP TABLE IF EXISTS employees;
DROP TABLE IF EXISTS departments;
DROP TABLE IF EXISTS salary_grades;-- 部門表
CREATE TABLE departments (dept_no INT NOT NULL,dept_name VARCHAR(14),location VARCHAR(13),PRIMARY KEY (dept_no)
);-- 員工表
CREATE TABLE employees (emp_no INT NOT NULL,emp_name VARCHAR(10),job_title VARCHAR(9),manager_id INT,hire_date DATE DEFAULT NULL,salary DECIMAL(7,2),commission DECIMAL(7,2),PRIMARY KEY (emp_no),dept_no INT,FOREIGN KEY (dept_no) REFERENCES departments(dept_no)
);-- 薪資等級表
CREATE TABLE salary_grades (grade INT,min_salary INT,max_salary INT
);-- 插入部門數據
INSERT INTO departments (dept_no, dept_name, location) VALUES
(10, 'ACCOUNTING', 'NEW YORK'),
(20, 'RESEARCH', 'DALLAS'),
(30, 'SALES', 'CHICAGO'),
(40, 'OPERATIONS', 'BOSTON');-- 插入員工數據
INSERT INTO employees (emp_no, emp_name, job_title, manager_id, hire_date, salary, commission, dept_no) VALUES
(7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800.00, NULL, 20),
(7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600.00, 300.00, 30),
(7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250.00, 500.00, 30),
(7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975.00, NULL, 20),
(7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250.00, 1400.00, 30),
(7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850.00, NULL, 30),
(7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450.00, NULL, 10),
(7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000.00, NULL, 20),
(7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000.00, NULL, 10),
(7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500.00, 0.00, 30),
(7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100.00, NULL, 20),
(7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950.00, NULL, 30),
(7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000.00, NULL, 20),
(7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300.00, NULL, 10);-- 插入薪資等級數據
INSERT INTO salary_grades (grade, min_salary, max_salary) VALUES
(1, 700, 1200),
(2, 1200, 1400),
(3, 1400, 2000),
(4, 2000, 3000),
(5, 3000, 9999);COMMIT;
二、簡單查詢
1.部分語法規則
- 一條 SQL 語句 必須以【;】結尾;
- SQL 語句沒有大小寫限制;
- 可以使用【desc + 表名】來查看表結構;
- 使用【\c】終止當前語句。
2.查詢一個字段
????????一個表有多列,查詢一個字段就是查詢其中的一列。
(1)查詢員工編號
select emp_no from employees;
(2)查詢員工姓名
select emp_name from employees;
3.查詢多個字段
? ? ? ? 查詢多個字段只需要在字段名之間添加【,】。
(1)查詢員工編號、姓名
select emp_no, emp_name from employees;
(2)查詢部門編號、名稱、位置?
select dept_no, dept_name, location from departments;
4.查詢全部字段
? ? ? ? 可以使用【*】代表所有字段。
? ? ? ? 但是使用【*】效率低、可讀性差。
(1)查詢薪資等級全部字段
select * from salary_grades;
?5.查詢時進行數學運算
(1)查詢員工姓名、年薪
select emp_name, salary * 12 from employees;
6.查詢時起別名?
(1)查詢員工姓名、年薪
select emp_name, salary * 12 as year_salary from employees;
(2)查詢員工全部信息
? ? ? ? 別名可以省略 as ,也可以是中文,但是低版本 MySQL 會報錯,需要添加單引號或雙引號,推薦使用單引號。
? ? ? ? 別名詞組間想要添加空格,也需要使用引號。
select emp_no as ID, emp_name as 姓名, job_title 職位, manager_id '領導ID', hire_date "入職日期", salary as 薪資, commission 津貼, dept_no '部門ID' from employees;
三、條件查詢?
1.過濾條件
條件 | 說明 |
---|---|
= | 等于 |
<> 或 != | 不等于 |
>= | 大于等于 |
<= | 小于等于 |
> | 大于 |
< | 小于 |
between…and… | 等同于 >= and <= |
is null | 為空 |
is not null | 不為空 |
<=> | 安全等于(較少使用) |
and 或 && | 與 |
or 或 || | 或 |
in | 在指定值當中 |
not in | 不在指定值當中 |
like | 模糊查詢 |
2.語法格式
- select …… from …… where [過濾條件]; ;
- 執行順序:
- 先執行 from;
- 再執行 where;
- 最后執行 select。
3.等于/不等于
(1)查詢姓名為“JONES”的員工信息
select * from employees where emp_name = 'JONES';
(2) 查詢位置不在“NEW YORK”的部門信息
# 方式1
select * from departments where location != 'NEW YORK';# 方式2
select * from departments where location <> 'NEW YORK';
4.大于等于/小于等于/大于/小于
(1)查詢月薪 2000 以上的員工姓名和薪資
select emp_name, salary from employees where salary >= 2000;
(2)查詢最低薪資低于 1400 的薪資等級信息
select * from salary_grades where min_salary <= 1400;
5.and/between…and…/or
(1)查詢薪資在 1600~2500 之間的員工信息
# 方式1
select * from employees where salary >= 1600 and salary <= 2500;# 方式2
select * from employees where salary between 1600 and 2500;
(2)查詢職位是“CLERK”或“SALESMAN”的員工信息
select * from employees where job_title = 'CLERK' or job_title = 'SALESMAN';
(3)and 和 or 優先級
? ? ? ? and 和 or 同時出現時,and 優先級更高。若希望先執行 or,需要給 or 條件添加小括號。
? ? ? ? 此外,無論是 Java 還是 SQL 中,遇到優先級不確定的情況,都可以添加小括號解決。
? ? ? ? 下面給出一個實例:
? ? ? ? 查詢薪資低于 1500,且部門編號是 20 或 30 的員工信息。
select * from employees where salary <= 1500 and (dept_no = 20 or dept_no =30);
?6.is null/is not null
? ? ? ? 判斷某個數據是否為 null,不可以使用【=】,只能使用【is null】。因為在數據庫中, null 不是一個值,只是代表沒有值/數據。
(1)查詢沒有津貼的員工信息
select * from employees where commission is null;
7.in/not in
? ? ? ? in 和 not in 后邊有一個小括號,括號內有多個值,值與值之間用【,】分割,其并不代表區間。
(1)查詢職位是“ANALYST”、“PRESIDENT”、“MANAGER”的員工信息
select * from employees where job_title in('ANALYST', 'PRESIDENT', 'MANAGER');
(2)是否忽略 null
- in 自動忽略 null;
- not in 不會自動忽略 null。
? ? ? ? 上述兩條語句與下方兩條語句等價?,所以可知其是否會忽略 null。
8.模糊查詢
- 語法格式:【select…?from… where 字段 like '通配符表達式';】;
- 通配符:
- %:任意多個字符;
- _:任意一個字符。
- 如遇到模糊查詢的內容中也出現上述通配符的情況,需要使用【\】轉義。
(1)查詢姓名以 S 開頭的員工信息?
select * from employees where emp_name like 'S%';
(2)查詢姓名以 T 結尾的員工信息
select * from employees where emp_name like '%T';
(3)查詢姓名第二個字母是 A 的員工信息
select * from employees where emp_name like '_A%';