基本SELECT语句语法
SELECT子句 表示所需检索的数据列。
FROM子句 表示检索的数据来自哪个表。
语句(statement):一条完整的SQL命令如:
select * from emp;
–子句(clause):部分的SQL语句,通常是由关键字加上其它语法元素构成,例如,SELECT
- 是一个子句,FROM table也是一个子句。
SQL语句的书写规则
–不区分大小写,也就是说SELECT,select,Select,执行时效果是一样的。
–可以单行来书写,也可以书写多行,建议分多行书写,增强代码可读性,通常以子句为单位进行分行。
–关键字不可以缩写、分开以及跨行书写,如SELECT不可以写成SEL或SELE
CT等形式。
–关键字最好使用大写,其它语法元素(如列名、表名等)小写。
–Tab和缩进的使用可以提高程序的可读性。
•选择所有列的两种方式
select * from 表名;
select deptno,dname,loc from dept;
练习:
用两种方式查询salgrade表数据
选择指定列
select 语句后列出要选择的列的列表
如:select deptno,dname from dept;
算术运算符(+-*/)
算术运算符优先级
–乘除优先于加减
–相同优先权的表达式按照从左至右的顺序依次计算
–括弧可以提高优先权,并使表达式的描述更为清晰
例:SELECT ename, sal, 12*sal+100 FROM emp;
SELECT ename, sal, 12*(sal+100);
空值NULL
•空值NULL
–空值是指一种无效的、未赋值、未知的或不可用的值。
–空值不同于零或者空格。
注意:任何包含空值的算术表达式运算后的结果都为空值NULL。
1 select ename, 12*sal+comm
2 from emp
3 WHERE ename='KING';
解决空值的方法
IFNULL函数
ifnull(expr1,expr2) ifnull函数如果第一个参数为空,则返回expr2,否则返回expr1
上面语句改写:
select ename,12*sal+ifnull(comm,0)
from emp
where ename='KING';
列别名
两种写法:
列名 as 列别名
列名 列别名
例:SELECT ename AS 姓名, sal 月薪
FROM emp;
消除重复行
distinct关键字,在select 子句中使用
select distinct job from emp;
显示表结构两种方式
desc 表名:
describe 表名:
*where子句
作用:指定查询条件,限制显示的数据行
语法:
SELECT [DISTINCT] {*| column | expression [alias], ...}
FROM table
[WHERE condition(s)];
•WHERE子句紧跟在FROM子句之后
•condition(s)表示条件表达式,
–通常格式为:列名 比较操作符 要比较的值
•比较操作符(> = < > = <= != <>)
比较数字相等
SELECT ename, job, deptno
FROM emp
WHERE deptno=20;
比较字符或日期相等
值需要加单引号
SELECT ename, job, deptno
FROM emp
WHERE job='CLERK';
SELECT ename, hiredate, deptno
FROM emp
WHERE hiredate > 1985-01-01';
特殊比较运算符
•BETWEEN..AND..
值介于两者之章,包括临界值
如:查询工资在1000到1500之间的员工信息
SELECT *
FROM emp
WHERE sal BETWEEN 1000 AND 1500;
查询1981年入职的员工信息
select *
from emp
where hiredate BETWEEN ‘1981-01-01’ AND ‘1981-12-31’
•IN运算符
满足条件的值比较多,圈定一个范围,用in
如:查询经理编号为7902,7566,7788的员工信息
SELECT empno, ename, sal, mgr
FROM emp
WHERE mgr IN (7902, 7566, 7788);
查询在10,20,30号部门工作的员工信息
select *
from emp
where deptno in(10,20,30);
特殊比较运算符
LIKE运算符*
重要,用于模糊查询
–模糊查询中两个通配符:
–%代表零或任意更多的字符
–_代表一个字符
%与_可混用
可以使用ESCAPE标识符实现对“%”和“_”的查找。
–例:查询JOB 以“MAN_”开头的雇员信息。
1 )查询指定字符开头的用‘s%’
2)查询指定字符结尾的用'%s'
3)查询包含指定字符的用'%S%'
SELECT ename,job
FROM emp
WHERE jobLIKE 'MAN@_%' ESCAPE '@';
•IS NULL 运算符
判断要比较的值是否为空值NULL
如:查询没有经理的员工
SELECT ename, mgr
FROM emp
WHERE mgr IS NULL;
逻辑运算符
用于连接多个查询条件
逻辑运算符包括AND、OR、NOT
and (和,多个条件需要同时满足)
or(或者 多个条件满足其中一个)
not(不是 反选 )
查询工资大于1000并且工作岗位为CLERK的员工信息
SELECT empno, ename, job, sal
FROM emp
WHERE sal>=1100
AND job='CLERK';
查询工资大于1000或者工作岗位为CLERK的员工信息
SELECT empno, ename, job, sal
FROM emp
WHERE sal>=1100
OR job='CLERK';
查询工资大于1000或者工作岗位不为CLERK,MANAGER的员工信息
SELECT ename, job
FROM emp
WHERE sal>=1100 and
job NOT IN ('CLERK','MANAGER','ANALYST');
–NOT运算符可以和BETWEEN…AND、LIKE、IS NULL一起使用
•...WHERE deptno NOT IN (10, 20)
•...WHERE sal NOT BETWEEN 3000 AND 5000
•...WHERE ename NOT LIKE 'D%’
•...WHERE mgr IS NOT NULL
•运算符的优先级*
小括号优先,实在记不住,用小括号括起
ORDER BY子句
对查询结果进行排序,写在所有子句后
•其中:
–可以按照列名、表达式、列别名、结果集的列序号排序
–ASC: 升序,默认值 DESC: 降序
–ORDER BY 子句必须写在SELECT语句的最后
如:SELECT ename, job, deptno, hiredate
FROM emp
ORDER BY sal asc,hiredate DESC;
其结果先按薪水升序排序,薪水相同的按出生日期降序
分页:
•使用select语句时,经常要返回前几条或者中间某几行记录,可以使用关键字limit。语法格式如下:
select 字段列表
from 数据源
limit [start,]length;
网友评论