一、 SQL语言基础
什么是SQL:
结构化查询语言(Structured Query Language)简称SQL,是
一种特殊目的的编程语言,是一种数据库查询和程序设计语言,
用于存取数据以及查询、更新和管理关系型数据库系统。
SQL语句分类
1、数据查询语句【(DQL)Data Query Language】Select 查询
2、数据操作语句(DML)【Data Manipulation Language】
- insert 插入
- Update 更新
- Delete 删除
3、数据定义语句(DDL)【Data Definition Language】
- Create 新建
- Alter 修改结构
- Drop 删除(库、表等)
- Rename 重命名
- Truncate 删除(表的数据)
4、事务控制语句(TCL)【Transaction Control Language】
- Commit 提交
- Rollback 事务回滚
- Savepoint 存储点
5、数据控制语言(DCL)【Data Control Language】
- Grant 授权
- Revoke 解除授权
1.基本的SELECT 命令
实例:
SELECT * FROM emp; # select:表示查找内容,from:查询哪一个表,*:表示查询所有,
2、选择指定的列
实例:
SELECT ename,sal from emp; #,:列名与列名之间用英文逗号间隔 查询emp表的名字和工资
3、注释
实例:
-- 单行注释 #注意--后面必须有一个空格
#单行注释
/*多
* 行
* 注
* 释
二、一般的编写规范
- sql语句不区分大小写,系统的关键字、保留字、函数名称大写,表名、列名小写。
- sql语句可以用空格间隔每个单词,也可以用回车。
- 复杂的语句要加上注释予以说明,系统不会执行注释的内容
其他注意事项:
- SQL 命令大小写不敏感
- SQL 命令可写成一行或多行
- 一个关键字不能跨多行
- SQL语句之间用分号 ;作为分隔符,系统读取到分号才会执行语句
1、算数
- 对数值型数据可用算数运算创建表达式
实例:、
select ename,sal,sal+200
from emp;
运算的优先级
-
乘法和除法的优先级高于加法和减法
-
同级运算的顺序是从左到右
-
表达式中使用小括号()可强行改变优先级的运算顺序
实例:
select ename,sal,12*sal+200
from emp;
2、定义空值
实例:
select ename,job,comm
from emp;
3、别名
实例:
select ename name,sal salary
from emp;
select ename ASname,sal ASsalary
from emp;
4、文字字符串
1.如果查询的数据跟表没关系,都是手动输入的 。在mysql中可以不写
from,只写select
实例:
SELECT 24*360; #注: 如果是oracle数据库, 则必须有from, 可以from dual表。dual表是一个空表。
2.日期和字符型文字字符必须用单引号括起来。数字不用
实例:
SELECT 'Hello World',123;
3.可以输入判断表达式,为真则显示1,为假则显示0
实例:
SELECT 10>9;
SELECT ename, sal>1000 FROM emp;
4.如果从表中查询手动输入的表达式,显示的结果条数和表中的
行数一致
实例:
SELECT 123,24*360 FROM emp;
5.重记录
实例:
SELECT deptno
FROM emp;
SELECT DISTINCT deptno #使用DISTINCT关键字可使显示结果去掉重复行
FROM emp
SELECT DISTINCT job,deptno
FROM emp;
三、限定和排序数据
1.使用选择限定
实例:
select * from emp where deptno =10;
2.使用WHERE子句
实例:
SELECT ename, job, deptno
FROM emp
WHERE job='CLERK';
注意:在Where子句中
- 字符串和日期要用单引号引起来, 数字不用
- 字符串大小写默认不敏感
- 不能使用列的别名作为where的条件
3.比较运算符
实例:
SELECT ename, sal, comm
FROM emp
WHERE sal<comm;
其它的比较运算符
4.使用BETWEEN运算符
实例:
SELECT ename, sal
FROM emp
WHERE sal BETWEEN 1000 AND 1500;
使用BETWEEN运算符显示某一值域范围的记录(包含范围的
这两个值)
5.使用IN运算符
实例:
SELECT empno, ename, sal, mgr
FROM emp
WHERE mgr IN (7902, 7566, 7788);
使用IN运算符获得匹配列表值的记录
6.使用LIKE运算符
实例:
SELECT ename
FROM emp
WHERE ename LIKE 'S%';
- 使用LIKE运算符模糊匹配查询
- 查询条件可包含文字字符或数字
- % 表示零个或多个任意字符 _ 表示任意一个字符
使用组合方式匹配字符
实例:
SELECT ename
FROM emp
WHERE ename LIKE '_A%';
匹配包含%或_本身的字符, 在左边加上 \ 符号,比如 % 和 _
实例:
SELECT ename
FROM emp
WHERE ename LIKE '%A\_B%';
7.使用IS NULL运算符
实例:
SELECT ename, mgr
FROM emp
WHERE mgr is NULL;
查询包含空值的记录
逻辑运算符
8.使用AND运算符
实例:
SELECT empno, ename, job, sal
FROM emp
WHERE sal>=1100
AND job='CLERK';
AND 需要同时满足两个条件才符合
9.使用OR运算符
实例:
SELECT empno, ename, job, sal
FROM emp
WHERE sal>=1100
OR job='CLERK';
OR 只要满足其中一个条件就符合
10.使用NOT运算符
实例:
SELECT ename, job
FROM emp
WHERE job NOT IN ('CLERK','MANAGER');
NOT 表示不满足某条件 就符合查询要求
11.优先级规则
- 小括号() 最优先
- 其次再看如下顺序,优先级从高到低排序
实例:使用括号提高优先级
1.
2.
12.ORDER BY 子句
使用ORDER BY 子句将记录排序
• ASC: 升序, 默认可以不写
• DESC: 降序
ORDER BY 子句在SELECT语句的最后
实例:
select ename,job,deptno,hiredate
from emp order by hiredate asc;
select ename,job,deptno,hiredate
from emp order by hiredate desc;
13.使用列的别名排序
实例:
select empno, ename, sal*12 nianxin
from emp
order by nianxin;
14.多个列排序
实例:
select ename, deptno, sal
from emp
order by deptno asc, sal desc;
15.限定结果显示行数
实例:
select ename
from emp
limit 3;
16.限定结果显示行数
实例:
select ename
from emp
limit 1,2;
四、函数
数字函数
实例:
select round(123.456,2); #将数字m精确到小数点后n位(四舍五入)
select mod(8,5); #返回m除以n的余数
select abs(6); #返回n的绝对值
使用大小写转换函数
实例:
显示小写名字
select lower(ename)
from emp;
显示大写名字
select upper(ename)
from emp;
使用字符处理函数
将字符串连接在一起
实例:
select concat(ename,'的工资是',sal) from emp;
返回字符串的字节个数
实例:
select length('qwe');
select char_length('qwe');
获取字符串str最左边的n个字符
实例:
select left('qwerty',2);
select right('qwerty',2);
获取字符串str第m个字符开始,长度为n的字符n可以不写, 则到字符串末尾
实例:
select mid('wahaha',2,3);
select mid('wahaha',2);
select substr('qwerty',2,3);
select substring('qwerty',2,3);
时间和日期函数
实例:
时期
select curdate();
时间
select curtime();
日期和时间
select now();
select year(now()); #年份
select month(now()); #月份
select day(now()); #日
给日期date加上n个type的时间单位,n可以是负数type可以是year month day
实例:
select date_add('1976-11-13',interval 2 day);
select date_add(curdate(),interval -1 month);
计算 date1 - date2 的间隔天数
实例:
select datediff(curdate(),'2018-07-31');
条件判断函数if
if(逻辑条件,value1,value2)
如果条件成立则返回value1,不成立则返回value2
实例:
select if(10>8,'真','假');
select if(10<8,'真','假');
select ename 姓名,sal 工资,if(sal>3000,'富','穷') 称号 from emp;
条件判断函数ifnull
ifnull(value1,value2)
对value1进行判断,如果value1不为空则返回value1,
如果value1为空则返回value2
select ename,job,sal,comm,12*(sal+ifnull(comm,0)) income from emp;
select ename,sal,comm,ifnull(sal+comm,sal) from emp; #员工工资加奖金的总和
条件判断函数case
根据员工不同的职位,显示不同的中文职位名称
clerk显示为 ‘办事员’,salesman显示为 ‘销售员’
manager显示为 ‘经理’,其他人显示为 ‘其他岗’
实例:
select
ename,
job,
case
job
when
'clerk' then '办事员'
when 'salesman' then '销售员'
when 'manger' then '经理'
else '其他岗位'
end 职位
from
emp;