SQL
- 什么是SQL
结构化查询语言
- 通用语法
单行或多行, 以分号结尾.
用空格和缩进增强可读性
不区分大小写, 关键字建议用大写.
三种注释
-- 单行注释 # 单行注释 /* */多行注释
- SQL分类
DDL(Data definition Language) 数据定义语言, 定义数据库对象. 例如: 数据库, 表, 列等. 关键字: create, drop, alter等.
DML(Data Manipulation Language) 桑菊操作语言 用来对数据库中的表的数据进行增删改, 关键字: insert, delete, update等.
DQL(Data Query Language)数据查询语言 用来查询数据库中表的记录. 关键字: select, where等.
DCL(Data Control Language)数据控制语言.用来定义数据库的访问级别以及创建用户. 关键字: grant, revoke等.
DDL: 操作数据库, 表
- 操作数据库: CRUD
C(Create): 创建
create database if not exists db character set gbk;
R(Retrieve): 查询
- 查询所有数据库名称: show databases;
- 查询创建数据库语句: show create database mysql;
U(Update): 修改
- 修改数据库字符集: alter database db_name character set utf8;
D(Delete): 删除
- 删除数据库: drop database if exists db_name;
使用数据库
- 查询当前数据库: select database();
- 使用数据库: use db_name;
- 操作表
C(Create): 创建
create table 表名(
列名1 数据类型1,
列名2 数据类型2
...
列名n 数据类型n
);
数据库类型:
int类型
double(5, 2) 小数类型, 共五位, 小数点后保留两位.
date 日期类型,只包含年月日 yyyy-MM-dd
datetime 年月日时分秒 yyyy-MM-dd HH:mm:ss
timestamp 时间戳,年月日时分秒 yyyy-MM-dd HH:mm:ss
如果将来不给这个字段赋值或者赋值为null, 则默认使用当前系统时间自动赋值.
varchar(20) 字符串类型,最大20个字符
//创建表 create table student( id int, name varchar(32), age int, score double(4,1), birthday date, insert_time timestamp ); //复制表 create table 表名 like 被复制表名;
R(Retrieve): 查询
- 查询所有表名称: show tables;
- 查询表结构: desc table_name;
U(Update): 修改
- 修改表名: alter table 表名 rename to 新表名;
- 修改表的字符集: alter table 表名 character set utf8;
- 添加一列: alter table 表名 add 列名 数据类型;
- 修改列名称,类型: alter table 表名 change 列名 新列名 新数据类型;
- 修改类型: alter table 表名 modify 列名 新数据类型;
- 删除列: alter table 表名 drop 列名;
D(Delete): 删除
- drop table if exists 表名;
DML: 增删改表中的数据
-
添加数据
insert into 表名(列名1, 列名2,...) values (值1, 值2, ...);
-
删除数据
delete from 表名 [where 条件]; TRUNCATE TABLE 表名; //删除表, 并创建一个一模一样的表
-
修改数据
update 表名 set 列名1=值1, 列名2=值2,...[where 条件];
DQL: 查询表中的记录
-
语法
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序字段 limit 分页
-
基础查询
-
多个字段的查询
select 字段1, 字段2... from 表名;
-
去除重复
SELECT DISTINCT 字段名 FROM 表名;
-
计算列
-- 计算math 和English分数之和 SELECT `name`, english, math+english FROM student; -- 如果有null参数的运算, 计算结果都为null,要用IFNULL设置默认值 SELECT `name`, math, english, math+IFNULL(english,0) FROM student;
-
起别名
SELECT `name`, math, english, math+IFNULL(english,0) as 总分 FROM student; SELECT `name` 名字, math 数学, english 英语, math+IFNULL(english,0) 总分 FROM student; -- AS 可以省略
-
-
条件查询
-
where子句后跟条件
-
运算符
> < <= >= = <> BETWEEN...AND IN(集合) LIKE _单个任意字符 %多个任意字符 IS NULL AND 或 && OR 或 || NOT 或 !
-- 查询年龄大于20岁 SELECT * FROM student WHERE age > 20; SELECT * FROM student WHERE age >= 20; -- 查询年龄等于20岁 SELECT * FROM student WHERE age = 20; -- 查询年龄不等于20岁 SELECT * FROM student WHERE age != 20; SELECT * FROM student WHERE age <> 20; -- 查询大于等于20, 小于等于30 SELECT * FROM student WHERE age >= 20 && age <= 30; SELECT * FROM student WHERE age >= 20 AND age <= 30; SELECT * FROM student WHERE age BETWEEN 20 AND 30; -- 查询年龄22岁, 18岁, 25岁的信息 SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25; SELECT * FROM student WHERE age IN(22, 18, 25); -- 查询英语成绩是null的记录, null不能使用=或者!=判断 SELECT * FROM student WHERE english = NULL; -- 错误 SELECT * FROM student WHERE english IS NULL; SELECT * FROM student WHERE english IS NOT NULL; -- 查询姓马的人 SELECT * FROM student WHERE `name` LIKE '马%'; -- 第二个字是化的人 SELECT * FROM student WHERE `name` LIKE "_化%"; -- 姓名是三个字的人 SELECT * FROM student WHERE `name` LIKE "___"; -- 查询姓名中包含马的人 SELECT * FROM student WHERE `name` LIKE "%马%";
-