一、SQL语句介绍
SQL(Structure Query Language)结构化查询语言
SQL语句分类
数据定义语言 DDL(data defination language)
create(创建)、drop(删除)、alter(修改)
用于创建、修改、删除数据库/表的语言
数据查询语言 DQL(data query language)
select操作
基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块
SELECT <字段名表>
FROM <表或视图名>
WHERE <查询条件>
数据操作语言 DML(data manipulation language)
insert(插入) 、delete(删除)、update(更新)
主要是数据库增、删、改三种操作
事务处理语言 TPL
commit(提交)、rollback (回滚)
用于控制数据库操纵事务发生的时间及效果,对数据库实行监视等。
数据控制语言 DCL(data control language)
grant(授权)、revoke(取消授权)
用于创建用户!用户赋予权限!
二、数据库的操作
DDL
数据定义语言
一、操作数据库
- 创建数据库
create database 数据库名称;
create database 数据库名称 character set gbk;
- 修改数据库编码
alter database 数据库名称 character set utf8;
- 查看数据库
show databases;
- 切换数据库
use 数据库名称;
select database(); --查询当前使用的数据库--
- 删除数据库
drop database 数据库名;
二、操作数据表
- 创建数据库表
语法
create table 表名(
列名 类型 [约束] comment '这一列是干啥的', --comment '注释'--
列名 类型 [约束]
)[charset=utf8] --设置编码格式--
类型
数字类型
int、tinyint - 4字节
double(多少位,小调点后面的位数) 注意有效15位!
decimal(多少位,小调点后面的位数)注意有效25位!
时间类型
date 年-月-日
time 时:分:秒
datetime 年-月-日 时:分:秒
timestamp 自动时间赋值 年-月-日 时:分:秒
时间格式就是字符串!真正开发存储时间字符串存时间戳!
字符串类型
- char(0-255)
- varchar(0-65535)
- 修改数据库表
添加一列
alter table 表名 add 列名 类型;
删除一列
alter table 表名 drop 列名;
更改列名
--注意:修改列名的时候尽量不要改类型!--
alter table 表名 change 原列名 新列名 类型;
修改列类型
alter table 表名 modify 列名 新类型;
修改表名
alter table 老表名 rename 新名字;
三、查看数据库表
desc 表名; --查看当前表包含的列--
show tables; --查看当前库包含哪些表!--
四、删除数据库表
drop table 表名;
DML数据操作语言
- 插入数据
insert into 表名(列名,列名...) value/values(值,值,值),(值,值,值);
--值和列名一一对应(位置,类型)--
insert into 表名 value/values(值,值,值),(值,值,值);
- 修改数据
update 表名 set 列 = 新值; --全列修改,支持(列 = 列 + - * / 值)--
update 表名 set 列 = 新值 ,列 = 新值 where 条件; --修改指定位置--
- 删除数据
delete from 表名; --全表删除--
delete from 表名 where 条件; --条件删除--
truncate table 表名; --truncat只删除数据,不破坏表的结构(定义)--
DQL
数据查询语言(重点)
语法
select 列表 from 表名 where 列名 逻辑符号 值('字符' int整数)/列名 or/and
-
基本查询
select * from 表名; select 列名,列名 from 表名;
-
条件查询
逻辑符号
=、!=、<>、<、<=、>、>=; //逻辑运算符
BETWEEN…AND; //在..和..之间的内容
IN(set); //在set集合中的内容
IS NULL; //不是空的内容
AND;
OR;
NOT; //非
查询学号不是S_1001,S_1002,S_1003的记录
SELECT * from stu where sid not in ('S_1001','S_1002','S_1003');
查询年龄为null的记录
SELECT * from stu where age IS NULL;
查询年龄在20到40之间的学生记录
SELECT * from stu where age BETWEEN 20 and 40;
查询性别非男的学生记录
SELECT * from stu where gender != 'male';
SELECT * from stu where not gender = 'male';
SELECT * from stu where gender <>'male';
查询姓名不为null的学生记录
SELECT * from stu where NOT sid is null;
SELECT * from stu where sid is NOT NULL;
- 模糊查询 LIKE
SELECT * from stu where sid like 值;
值:
% : 任意长度字符串
_ :任意一个字符 ps:name like '张_'
%值%
- 分支查询
select 列,
case
when 条件 then 值
when 条件 then 值
else 值
end as ‘列名’ from 表;
- 时间查询
SYSDATE() | 当前系统时间(日、月、年、时、分、秒) |
---|---|
CURDATE() | 获取当前日期 |
CURTIME() | 获取当前时间 |
WEEK(DATE) | 获取指定日期为一年中的第几周 |
YEAR(DATE) | 获取指定日期的年份 |
HOUR(TIME) | 获取指定时间的小时值 |
MINUTE(TIME) | 获取时间的分钟值 |
DATEDIFF(DATE1,DATE2) | 获取DATE1 和 DATE2 之间相隔的天数 |
ADDDATE(DATE,N) | 计算DATE 加上 N 天后的日期 |
-
时间函数使用
-
时间函数可以放在列的位置 select 时间函数
-
时间函数可以放在查询值得位置 select * from 表名 where 列名 = 时间函数;
-
时间函数也可以放在查询条件位置 select * from 表名 where 时间函数 = 值;
例如: hiredate > '1990-01-01'
-
-
数学函数
-
ceil
(数字) 向上舍于 -
floor
(数字)向下舍于 -
round
(数字) / round(数字,小数点为主) 四舍五入
-
- 聚合函数
SUM() 求和
AVG() 求平均值
MAX() 求最大值
MIN() 求最小值
COUNT() 求个数
-
字段控制
DISTINCT
去重复数据
select distinct 列名 from 表名
IFNULL()
如果为null赋予的值!
ifnull(列名,如果为null的值)
列起别名
select 列名 as 别名;
select 列名 别名;
排序查询
语法
order by 列名 [asc]/desc ,列名 [asc 默认]/desc...;
注意:如果有多个排序!他们不是平等!有优先级的!前面相等后面才会生效!
asc:正序 升序 从 小 到 大
desc:倒叙 降序 从 大 到 小
分组查询
语法:group by
select 分组列,聚合函数 from 表名 group by 列名;
分组条件查询
语法:having
group by 列 having 聚合函数 逻辑运算符 值;
与where的最大区别! 一个是分组前的筛选!一个是分组后的筛选!
having后面通常跟的是聚合函数!
分页查询
语法:linmt
select * from 表名 limit offset ,rowcount;
offset:起始光标
rowcount:结束光标
查询总结
select * from 表名 where like group by 列名 having
order by 列名 asc/desc limit offset,rowcount;
约束限制
什么是主键?分类?
具有唯一并且不为null的列!我们可以称它为主键。
分类:自然主键:本身实体具备的属性!当时具备唯一并且不为null的原则
自定义主键:完全为了主键而生!
主键约束 primary key
-
直接添加
create table 表名( 主键名 int primary key );
-
联合主键
create table 表名( 列名 int, 列名 int, primary key(列名, 列名) );
自增约束 auto_increment
用于与联合主键配合,实现自增
主键整数类型 int primary key auto_increment
拓展:类型是字符串时,使用uuid
实现约束
主键字符串类型 varchar(64) primary key uuid
唯一约束 unique
不重复,但是可以为NULL
域约束
非空约束 NOT NULL
列名 类型 not null unique
默认约束 default
列名 类型 default 'xxx'
不为负数约束 unsigned
通常用于限制年龄不为负数