- DML语句(Data Manipulation Language 数据操纵语言)
针对 table 数据表中数据的增删改,使用DML
- DQL语句(Data Query Language 数据查询语言)
针对 table 数据表中数据的查询操作,使用DQL
- DCL语句(Data Control Language 数据控制语言)—了解
事务的提交/回滚等
3.1 SQL通用语法
- SQL语句可以单行 或者 多行书写,以分号结尾 ; (Sqlyog中可以不用写分号)
- 可以使用空格和缩进来增加语句的可读性。
MySql中使用SQL不区分大小写,一般关键字大写,数据库名 表名列名 小写。
3.2. 注释方式
# show databases; 单行注释
-- show databases; 单行注释
/*
多行注释
show databases;
*/
3.3 DDL操作数据库
1)创建数据库
create database 数据库名;说明:创建指定名称的数据库。
- create database 数据库名 characterset 字符集;说明:创建指定名称的数据库,并且指定字符集(一
般都指定utf8)
/*
方式1 直接指定数据库名进行创建
*/
CREATE DATABASE db1;
/*
方式2 指定数据库名称,指定数据库的字符集
一般都指定为 utf8
*/
CREATE DATABASE db2 CHARACTER SET utf8;
2)查看/选择数据库
命令 | 说明 |
---|---|
use 数据库名; | 切换到指定的数据库 |
select database(); | 查看当前正在使用的数据库 |
show databases; | 查看Mysql中有哪些数据库 |
show create database 数据库名; | 查看指定数据库的定义信息 |
3)修改数据库
- 修改数据库字符集 | 命令 | 说明 | | —- | —- | | alter database 数据库名 character set 字符集; | 修改指定数据库的字符集 |
4)删除数据库
命令 | 说明 |
---|---|
drop database 数据库名; | 永久删除指定的数据库 |
3.4 DDL 操作数据库表
1)创建表
CREATE TABLE 表名(
字段名称1 字段类型(长度),
字段名称1 字段类型
);
例如:
CREATE TABLE user(
id int,
username varchar(32),
password varchar(32),
sex char(1)
);
# 创建一个表结构相同的表(复制表结构)
create table 新表名 like 旧表名
2)查看表
# 查看当前数据库中的所有表名
SHOW TABLES;
# 显示当前数据表的结构
DESC category;
# 查看创建表的SQL语句
SHOW CREATE TABLE category;
3)修改表
# 修改表名
rename table 旧表名 to 新表名;
# 向表中添加一列,关键字 ADD
alter table 表名 add 字段名称 字段类型
# 修改表中列的数据类型或长度,关键字类型 MODIFY
alter table 表名 modify 字段名称 字段类型
# 修改列名称,关键字 CHANGE
alter table 表名 change 旧列名 新列名 类型(长度);
# 删除列,关键字 DROP
alter table 表名 drop 列名;
3.5 DML 操作表中数据(重点)
1)插入数据
# 创建学生表
CREATE TABLE student(
id INT,
name VARCHAR(20),
age INT,
sex CHAR(1),
address VARCHAR(40)
);
# 插入数据
# 方式一:插入全部字段, 将所有字段名都写出来
INSERT INTO student (id,name,age,sex,address) VALUES(1,'张三',20,'男','北京');
# 方式二:插入全部字段,不写字段名
INSERT INTO student VALUES(1,'张三',20,'男','北京');
# 方式三:插入指定字段的值
INSERT INTO student (name) VALUES('张三');
注意:
- 值与字段必须要对应,个数&数据类型 都要相同
- 值的数据大小必须在字段指定的长度范围内
- varchar、char、date 类型的值必须使用单引号包裹
- 如果要插入空值,可以不写,或者写 null
- 如果要插入指定字段的值,必须要写上列名
2)删除数据
# 删除 id 为 1 的数据
DELETE FROM student WHERE id = 1;
# 删除所有数据
DELETE FROM student;
若要删除表中的所有数据,有2种做法:
- delete form 表名; 不推荐,有多少条记录,就执行多少次删除操作。效率低
- truncate table 表名; 推荐,先删除整张表,然后再重新创建一张一模一样的表。效率高
当一个表中记录条数很多,又要做删除动作的时候,使用 delete 会很慢,可以使用 truncate。
3)修改数据
# 不带条件的修改
update 表名 set 列名 = 值
# 带条件的修改
update 表名 set 列名 = 值 where 条件表达式;
4)查询数据
查询的结构:
#方式1:
SELECT ...,....,...
FROM ...,...,....
WHERE 多表的连接条件
AND 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...
#方式2:
SELECT ...,....,...
FROM ... JOIN ...
ON 多表的连接条件
JOIN ...
ON ...
WHERE 不包含组函数的过滤条件
AND/OR 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...
#其中:
#(1)from:从哪些表中筛选
#(2)on:关联多表查询时,去除笛卡尔积
#(3)where:从表中筛选的条件
#(4)group by:分组依据
#(5)having:在统计结果中再次筛选
#(6)order by:排序
#(7)limit:分页
SELECT 查询时的两个顺序:
1. 关键字的顺序是不能颠倒的:
SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY … LIMIT…
- SELECT 语句的执行顺序(在 MySQL 和 Oracle 中,SELECT 执行顺序基本相同):
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY -> LIMIT
单表查询:
# 查询所有:使用 * 表示所有列
SELECT * FROM student;
# 查询部分:
SELECT id,name FROM student;
# 别名查询,使用关键字 as
SELECT id as '学号',name as '姓名' FROM student;
# 去重查询,去掉查询出来的重复信息,关键字 distinct
select xxx,xxx from student;
# 运算查询 (查询结果参与运算)
select id, age + 1 from student;
条件查询: :::tips SELECT field1, field2,…fieldN FROM table_name1, table_name2… [WHERE condition1 [AND [OR]] condition2….. :::
- 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
- 你可以在 WHERE 子句中指定任何条件。
- 你可以使用 AND 或者 OR 指定一个或多个条件。
- WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
- WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。 | 操作符 | 描述 | 实例 | | —- | —- | —- | | = | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false。 | | <>, != | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true。 | | > | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (A > B) 返回false。 | | < | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A < B) 返回 true。 | | >= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true | (A >= B) 返回false。 | | <= | 小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |