本文共 4851 字,大约阅读时间需要 16 分钟。
sql 语句对于不同数据域库有微小差距
create 创建表,视图、索引...
drop 删除表、视图、索引.. alter 修改 truncate 截断insert 插入数据
update修改 delete 删除 select 查询grant 授权
revoke 回收权限start transaction 开始事务(begin)
commit rollbackunique 唯一
not null 非空 primary key 主键 (只要有一个) foreign key 外键 (需要引用另外一个表的主键或唯一列)联合唯一约束
primary key (列名1,列名2) /组 (复)合主键/desc +组名 显示表
sql 2行
sql 2行
sql 2行
alter table teacher add age tinyint;
给老师表的姓名扩展长度
sql 2行
sql 2行
sql 2行
alter table teacher modify tname vatchar(30);
delete from 表; -- 如果和事务SQL结合使用,是有机会恢复
truncate table 表; --没法和事务sql结合,不能恢复,效率更高insert into 表(多个列...)values (多个值...);
sql 2行
sql 2行
sql 2行
insert into 表(多个列...)values (多个值...),(多个值...),(多个值...)...;
用insert 插入另一张表的数据
sql 2行
sql 2行
sql 2行
insert into 表1(列1,列2...) select 列1 ,列2.. from 表2;
列的个数和类型要一致,标准的,所有的SQL都可以用
-- 更新所有的员工工资涨一百
sql 2行
sql 2行
sql 2行
update emp set sal=sal+100
--修改7369的员工部门为10号部门
sql 2行
sql 2行
sql 2行
update emp set deptno=10 where empno =7369;
--修改7000(并没有这个编号)的员工部门为10号部门
sql 2行
sql 2行
sql 2行
update emp set deptno=10 where empno =7369;
如果条件不满足,不会报错,但影响行数为0
主键列主要用于查询,一般不会更新。
delete from 表;全部删除
delete from 表where 条件;删除符合条件的记录不能删除一个被引用的父类列为了方便称呼,主键所在的表可以称为主表,而外键所在的表称为从表
sql 2行
sql 2行
sql 2行
foreign key (deptno)references dept (deptno) on delete cascade
select 列名..from 表名 where 条件;
1.比较运算
=
大于 > 大于等于>= 小于< <= !=2.逻辑运算
and(并且)
or (或者) not(取反)--
where sal >80 and deptno =20; where deptno =20 or deptno =30;or 左右两边要写完整3.null
数据库中的null,比较特殊,不能使用=来比较,必须用 is null
sql 3行
sql 3行
sql 3行
select * from emp where comm is null;select * from emp where comm is not null; //非空
4.like (模糊查询)
例如:查询以“s”字母开头的员工(s%)
sql 2行
sql 2行
sql 2行
select * from emp where comm like 's%';
通配符% 表示匹配0~多个任意的字符
通配符 _ 表示匹配一个任意字符可以查询准确个数字符的值5.between ... and ... 范围匹配(等价于 >= <=)
sql 2行
sql 2行
sql 2行
select *from emp where sal between 1000 and 2000;
*1.必须按由小到大的顺序写
2.between 包含等于条件6. in求这一列是否在一个值列表中
例如:求所有的销售人员和经理
sql 4行
sql 4行
sql 4行
select * from emp where job ='SALEMAN' or 'MANAGER';select * from emp where job in('SALEMAN' ,'MANAGER') ;
7.limit MySQL 特有的
用来限制返回的结果数
3行
3行
3行
1.limit n; n 表示最多返回几条记录 2.limit m,n; m代表偏移量(下标从0开始数)
8.order by 用来给结果排序
语法: order by 列名 asc|desc,列名asc|desc,...
如果不写asc|desc,默认是asc升序多列排序,第一列取值相同的按照第二列进行排序
sql 2行
sql 2行
sql 2行
select from emp order by sal asc,enamesac;/*如果升序,两个asc都可以省略*/
9.select语句的顺序
sql 2行
sql 2行
sql 2行
select ...from 表 where 条件 order by 排序 limit 限制
例如 lower函数可以把字符变成小写
upper函数可以把字符变成大写常用的函数:
1)时间加减
sql 2行
sql 2行
sql 2行
>date_add(原始时间,时间间隔)
时间间隔的语法:interval 数字 时间单位
数字可以是 可以正数或负数
sql 2行
sql 2行
sql 2行
select date_add(now(),interval 1 day);
2)提取时间的某个部分
sql 4行
sql 4行
sql 4行
extract (时间部分 from 原始时间)select extract(year from now());select extract(year_month from now());
返回的结果是一个数字类型
3)类型转换sql 3行
sql 3行
sql 3行
select cast ('11' as signed)+1;select cast('12.55555' as decimal (5,2));
4)拼接字符串
sql 4行
sql 4行
sql 4行
concat(值1,值2,...值n)select concat ('a','b','c');select concat('a',18,'c');/*可以把其他的类型当做字符串的拼接*/
5)求长度的函数
char_length 按字符为单位统计长度 length 按字节为单位统计长度 utf8mb4编码下,汉子一个字符占三个字节,英文一个字符占一个字节 6)标准SQL case when 条件1 then 值1 when 条件2 then 值2 ... else 值n end 整个case...end 最后返回一个值
sql 7行
sql 7行
sql 7行
select sal,case when sal>1000 then '高工资' wen sal between 1000 and 2000 then '中等' else '低工资'end from emp;
7)组函数
最大值 max(列) 最小值 min(列) 和 sum(列); 个数 count(列)注意空值的问题 ,求个数时将空值排除在外 |count (*)针对这次查询看看一共有多少行 平均值 avg(列) 针对可以求平均值的列才能执行 8) 去除重复 distinct不是函数 就是关键字 加在列名前
sql 3行
sql 3行
sql 3行
>select distinct job from emp;/*去除重复后的职位有哪些*、>select count (distinct ) from emp;/*有几种职位*/
9)查询帮助
? contents;select ...from 表 group by 列1,列2,..having分组条件
sql 3行
sql 3行
sql 3行
select depton,count(* ),max(sal) from emp group by deptno;select depton,count(* ),max(sal) from emp group by deptno having count(* )>3;
分组后select,order by的限制 1)select中的列必须和 group by 中的列一致 2)其它没有包含在group by 语句中的列,必须和组函数一起用。
where 进行一遍条件过滤,再执行group by 分组,再执行having中的条件,再执行select语句,再执行limit语句
sql 2行
sql 2行
sql 2行
select ... from... where...group by...having...order by...limit;
语法:select 列名 别名可以中文但是不能加特殊字符,加双引号可以解决
语法2:select 列名 as 别名 select deptno 部门编号,count(* ) 人数,max (sal)最高工资 from emp group by deptno having count(* )>3 order by max(sal);select deptno 部门编号,count(* ) 人数,max (sal)最高工资 from emp group by deptno having count(* )>3 order by 人数;
select e.* from emp e ;
语法:select...from 表 别名select deptno,job,count(* ) from emp group by deptno,job;/按两列取值相同的分为一组/
转载地址:http://gqksi.baihongyu.com/