1. 基本SELECT语句
SELECT *|{[DISTINCT] column|expression[alias],...}
FROM table;
SELECT 标识选择哪些列。
FROM 标识从哪个表中选择。
类似于Java中 :System.out.println(要打印的东西);
特点:
(1)通过select查询完的结果 ,是一个虚拟的表格,不是真实存在
(2)要查询的东西 可以是常量值、可以是表达式、可以是字段、可以是函数
1.1 查询字段
- 选择全部列
SELECT *
FROM departments;
- 选择特定的列
SELECT department_id, location_id
FROM departments;
注意:
(1) SQL 语言大小写不敏感。
(2) SQL 可以写在一行或者多行
(3 )关键字不能被缩写也不能分行
(4) 各子句一般要分行写。
(5) 使用缩进提高语句的可读性。
- 使用别名
SELECT last_name AS name, commission_pct comm # name comm 即为别名
FROM employees;
SELECT last_name "Name", salary*12 "Annual Salary" # Name/ Annual Salary 即为别名
FROM employees;
1.2 选择字符串
字符串可以是SELECT 列表中的一个字符、数字、日期。
- 日期和字符只能在单引号中出现。
- 每当返回一行时,字符串被输出一次。
使用DESCRIBE 命令显示表结构
DESCRIBE employees
1.3 查询常量
SELECT 常量值
注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要
1.4 去重
SELECT DISTINCT 字段名
FROM 表名
1.5 +运算
SELECT 数值+数值:直接运算
SELECT 字符+数值:先试图将字符转换为数值,如果转换成功则继续运算,否则转换为0再做运算
2.条件查询
条件查询:根据条件过滤原始表的数据,查询到想要的数据
使用 WHERE 子句,将不满足条件的行过滤掉。
语法:
SELECT
要查询的字段|表达式|常量值|函数
FROM
表
WHERE
条件 ;
SELECT *|{[DISTINCT] column|expression[alias],...}
FROM table
WHERE condition(s);
返回在90号部门工作的所有员工的信息
SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90 ;
2.1 条件表达式
示例:salary>10000
SELECT last_name, salary
FROM employees
WHERE salary <= 3000;
2.2 逻辑表达式
and(&&):两个条件如果同时成立,结果为true,否则为false
or(||):两个条件只要有一个成立,结果为true,否则为false
not(!):如果条件成立,则not后为false,否则为true
示例说明:
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >=10000
AND job_id LIKE '%MAN%';
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary >= 10000
OR job_id LIKE '%MAN%';
SELECT last_name, job_id
FROM employees
WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');
2.3 模糊查询
1.使用BETWEEN 运算来显示在一个区间内的值
SELECT last_name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500;
2.使用IN运算显示列表中的值。
SELECT employee_id, last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 201);
3.使用 LIKE 运算选择类似的值
选择条件可以包含字符或数字:
- –% 代表零个或多个字符(任意个字符)。
- –_ 代表一个字符。
SELECT first_name
FROM employees
WHERE first_name LIKE 'S%'; #名字以'S'开头
- ‘%’ 和 ‘-’ 可以同时使用。
SELECT last_name
FROM employees
WHERE last_name LIKE '_o%'; #名字第二个字符为'o'
4.使用 IS (NOT) NULL 判断空值。
SELECT last_name, manager_id
FROM employees
WHERE manager_id IS NULL; # manager_id 为null
3. 排序查询
使用ORDER BY 子句排序
–ASC(ascend): 升序
–DESC(descend): 降序
1.语法:
SELECT
要查询的东西
FROM
表
WHERE
条件
ORDER BY 排序的字段|表达式|函数|别名 【ASC|DESC】
如果不写【ASC|DESC】,默认是升序
SELECT last_name, job_id, department_id, hire_date
FROM employees
ORDER BY hire_date DESC;
2.按别名排序:
SELECT employee_id, last_name, salary*12 annsal
FROM employees
ORDER BY annsal;
3.多个列排序(第一列升序排序完,若有相等情况再按照第二列降序排序)
SELECT last_name, department_id, salary
FROM employees
ORDER BY department_id, salary DESC;