语句分类详解:
一、DDL----操作数据库和表结构
1.1 DDL操作数据库
1.1.1创建数据库
创建数据库
CREATE DATABASE 数据库名;
判断数据库是否已经存在,不存在则创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名;
创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
具体实现:
-- 直接创建数据库 db1
create database db1;
-- 判断是否存在,如果不存在则创建数据库 db2 create database if not exists db2; -- 创建数据库并指定字符集为 gbk create database db3 default character set gbk;
1.1.2查看数据库
-- 查看所有的数据库
show databases;
-- 查看某个数据库的定义信息 show create database db3; show create database db1;
注意:按 tab 键可以自动补全关键字
1.1.3修改数据库
修改数据库默认的字符集
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
具体实现:
将 db3 数据库的字符集改成 utf8
alter database db3 character set utf8;
1.1.4删除数据库
删除数据库的语法
DROP DATABASE 数据库名;
具体实现:
删除 db2 数据库
drop database db2;
注意:每行 SQL 语句需要选中再执行,可以按 F9
使用数据库
查看正在使用的数据库
SELECT DATABASE(); 使用的一个 mysql 中的全局函数
使用/切换数据库
USE 数据库名;
具体实现:
-- 查看正在使用的数据库
select database();
-- 改变要使用的数据库 use db4;
1.2 DDL操作表结构
先使用数据库才能进行操作表
1.2.1 创建表
创建表的格式
CREATE TABLE 表名 ( 字段名 1 字段类型 1, 字段名 2 字段类型 2 );
具体操作:
- 创建 student 表包含 id,name,birthday 字段
-
create table student ( id int, -- 整数 name varchar(20), -- 字符串 birthday date -- 生日,最后没有逗号 );
1.2.2 查看表
查看某个数据库中的所有表
SHOW TABLES;
查看表结构
DESC 表名;
查看创建表的 SQL 语句
SHOW CREATE TABLE 表名;
- 具体操作
--查看 day21 数据库中的所有表 use day21; show tables; --查看 student 表的结构 desc student; --执行结果: --查看 student 的创建表 SQL 语句 show create table student; 执行结果: -- 存在的目的是为了避免关键字的冲突 CREATE TABLE `student` ( `id` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL, `birthday` date DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8
快速创建一个表结构相同的表
创建 s1 表,s1 表结构和 student 表结构相同
-- 创建一个 s1 的表与 student 结构相同
create table s1 like student;
desc s1;
1.2.3 修改表
添加表列 ADD
ALTER TABLE 表名 ADD 列名 类型;
修改列类型 MODIFY
ALTER TABLE 表名 MODIFY 列名 新的类型;
删除列 DROP
ALTER TABLE 表名 DROP 列名;
修改表名
RENAME TABLE 表名 TO 新表名;
修改字符集 character set
ALTER TABLE 表名 character set 字符集;
1.2.4 删除表
直接删除表
DROP TABLE 表名;
判断表是否存在,如果存在则删除表
DROP TABLE IF EXISTS 表名;
具体实现:
-- 直接删除表 s1 表 drop table s1; -- 判断表是否存在并删除 s1 表 drop table if exists `create`;
与直接删除的区别
如果表不存在,不删除,存在则删除
二、DML----操作表中数据
2.1 DML操作表中的数据
2.1.1 插入记录
INSERT [INTO] 表名 [字段名] VALUES (字段值)
INSERT INTO 表名:表示往哪张表中添加数据
(字段名 1, 字段名 2, …):要给哪些字段设置值
VALUES (值 1, 值 2, …):设置具体的值
插入全部字段两种方式:
- 所有的字段名都写出来
INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3);
- 不写字段名
INSERT INTO 表名 VALUES (值 1, 值 2, 值 3…);
插入部分数据
INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);
2.1.2 更新表记录
- UPDATE 表名 SET 列名=值 [WHERE 条件表达式]
- UPDATE: 需要更新的表名
- SET: 修改的列值
- WHERE: 符合条件的记录才更新
- 你可以同时更新一个或多个字段。
- 你可以在 WHERE 子句中指定任何条件。
不带条件修改数据
UPDATE 表名 SET 字段名=值; -- 修改所有的行
带条件修改数据
UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
具体实现
-- 不带条件修改数据,将所有的性别改成女 update student set sex = '女'; -- 带条件修改数据,将 id 号为 2 的学生性别改成男 update student set sex='男' where id=2; -- 一次修改多个列,把 id 为 3 的学生,年龄改成 26 岁,address 改成北京 update student set age=26, address='北京' where id=3;
2.1.3 删除表记录
- DELETE FROM 表名 [WHERE 条件表达式]
- 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
- 你可以在 WHERE 子句中指定任何条件
不带条件删除数据
DELETE FROM 表名;
带条件删除数据
DELETE FROM 表名 WHERE 字段名=值;
使用 truncate 删除表中所有记录
TRUNCATE TABLE 表名;
truncate 和 delete 的区别:
truncate 相当于删除表的结构,再创建一张表。
具体实现
-- 带条件删除数据,删除 id 为 1 的记录 delete from student where id=1; -- 不带条件删除数据,删除表中的所有数据 delete from student;
三、DQL----查询表中的数据
3.1 简单查询
查询表所有行和列的数据
使用*表示所有列
SELECT * FROM 表名;
查询所有的学生:
select * from student;
查询指定列
查询指定列的数据,多个列之间以逗号分隔
SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;
查询 student 表中的 name 和 age 列
select name,age from student;
3.2 指定列的别名进行查询
使用关键字
使用别名的好处: 显示的时候使用新的名字,并不修改表的结构。
语法:
对列指定别名
SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名;
对列和表同时指定别名
SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名 AS 表别名;
具体操作:
-- 使用别名 select name as 姓名,age as 年龄 from student; -- 表使用别名 select st.name as 姓名,age as 年龄 from student as st
3.3 清除重复值
查询指定列并且结果不出现重复数据
SELECT DISTINCT 字段名 FROM 表名;
具体操作:
查询学生来至于哪些地方 -- 查询学生来至于哪些地方 select address from student; -- 去掉重复的记录 select distinct address from student;
3.4 查询结果参与运算
某列数据和固定值运算
SELECT 列名 1 + 固定值 FROM 表名;
某列数据和其他列数据参与运算
SELECT 列名 1 + 列名 2 FROM 表名;
注意: 参与运算的必须是数值类型
3.5 条件查询
为什么要条件查询?
如果没有查询条件,则每次查询所有的行。实际应用中,一般要指定查询的条件。对记录进行过滤。
条件查询的语法
SELECT 字段名 FROM 表名 WHERE 条件;
流程:取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回
具体实现:
准备数据
创建一个学生表,包含如下列:
具体操作:
-- 查询 math 分数大于 80 分的学生 select * from student3 where math>80; -- 查询 english 分数小于或等于 80 分的学生 select * from student3 where english <=80; -- 查询 age 等于 20 岁的学生 select * from student3 where age = 20; -- 查询 age 不等于 20 岁的学生,注:不等于有两种写法 select * from student3 where age <> 20; select * from student3 where age != 20;
具体操作:
-- 查询 age 大于 35 且性别为男的学生(两个条件同时满足) select * from student3 where age>35 and sex='男'; -- 查询 age 大于 35 或性别为男的学生(两个条件其中一个满足) select * from student3 where age>35 or sex='男'; -- 查询 id 是 1 或 3 或 5 的学生 select * from student3 where id=1 or id=3 or id=5;
-- 查询姓马的学生 select * from student3 where name like '马%'; select * from student3 where name like '马'; -- 查询姓名中包含'德'字的学生 select * from student3 where name like '%德%'; -- 查询姓马,且姓名有两个字的学生 select * from student3 where name like '马_';