如今SQL的应用不仅在互联网公司,在各行各业中的生产研发等岗位几乎是一个必备技能,如果不会 SQL 的话,可能什么都做不了。你可以把 SQL 当做是一种工具,利用它可以帮助你完成你的工作,创造价值,是每一个程序员和学生必须掌握的技能.
一、SQL语句的分类
1.DDL: 数据定义语言, 主要是操作: 数据库, 数据表, 列名.
关键字: create, drop, alter, show...
2.DML: 数据操作语言, 主要是操作: 表数据, 更新操作(增删改)
关键字: insert, delete, update
3.DQL: 数据查询语言, 主要是操作: 表数据, 查询操作.
关键字: select, from, where
4.DCL: 数据控制语言, 主要是操作: 用户, 设置权限, 隔离级别.
二、SQL语句的解释
1.DDL语句-操作数据库
# -------------------- DDL语句 操作数据库 --------------------
-- 1. 查看所有的数据库
show databases;
-- 格式: create database if not exists 数据库名 charset '码表名';
-- 2. 创建数据库, 采用默认码表.
create database testdb; -- 默认码表: utf8
-- 3. 创建数据库, 采用: 指定码表.
create database testdb charset 'gbk'; -- 指定码表: gbk
-- 4. 创建数据库, 如果数据库不存在.
create database if not exists testdb; -- testdb数据库不存在就创建, 存在就: 啥也不做.
-- 5. 查看(单个)数据库的详细信息(码表)
show create database testdb;
-- 6. 修改数据库的(码表).
alter database testdb charset 'utf8';
-- 7. 删除指定的数据库.
-- 格式: drop database 数据库名;
drop database testdb;
-- 8. 切库. (掌握)
use testdb;
-- 9. 查看当前使用的是哪个数据库.
select database();
2.DDL语句-操作数据表
# -------------------- DDL语句 操作数据表 --------------------
-- 0. 切库.
use testdb;
-- 1. 查看(当前数据库中)所有的数据表
show tables;
-- 2. 创建数据表.
/*
格式:
create table [if not exists] 数据表名(
列名1 数据类型 [约束],
列名2 数据类型 [约束],
列名3 数据类型 [约束],
...
列名n 数据类型 [约束] # 最后1个列名的结尾, 没有逗号.
);
*/
-- 需求: 创建学生表student, 字段(学生编号, 姓名 非空约束, 性别, 年龄)
create table if not exists student(
id int, # 学生编号
name varchar(20) not null, # 学生姓名, 非空
gender varchar(10), # 学生性别
age int # 学生年龄
);
-- 3. 查看(单个)数据表的详细信息(码表)
show create table student;
desc student; # 查看表的字段(有哪些字段, 字段的数据类型, 约束等...), describe: 描述.
desc stu;
-- 4. 修改数据表的(表名).
-- 格式: rename table 旧表名 to 新表名;
rename table student to stu;
-- 5. 删除指定的数据表.
drop table stu;
3.DDL语句-操作字段
# -------------------- DDL语句 操作字段 --------------------
-- 1. 查看表的所有(列)
desc student;
-- 2. 给表 新增列.
-- 格式: alter table 表名 add 列名 数据类型 [约束];
alter table student add hobby varchar(20) not null;
-- 3. 修改列, 数据类型 和 约束. hobby列, varchar(20) -> int
-- 格式: alter table 表名 modify 列名 数据类型 [约束];
alter table student modify hobby int ; -- 不加约束, 则会取消之前的约束.
-- 4. 修改列, 列名, 数据类型 和 约束. hobby-> hb varchar(10) 非空
-- 格式: alter table 表名 change 旧列名 新列名 数据类型 [约束];
alter table student change hobby hb varchar(10) not null;
-- 5. 删除指定的列.
-- 格式: alter table 表名 drop 列名;
alter table student drop hb;
4.DML语句-操作表数据
-- DML语句: 数据操作语言, 主要是对表数据进行更新操作的, 即: 增删改.
-- 关键字: insert, delete, update
# -------------------- 案例1: DML语句 操作数据表 增 --------------------
/*
格式:
insert into 表名(列名1, 列名2...) values(值1, 值2...);
insert into 表名 values(值1, 值2...);
insert into 表名 values(null, 值2...);
insert into 表名 values
(值1, 值2...),
(值1, 值2...),
......
(值1, 值2...);
细节:
1. 添加表数据的时候, 值的个数和类型, 要和 列名保持一致.
2. 如果不写列名, 则默认是全列名, 即: 必须给所有的列依次赋值.
3. 如果是主键列且配合有自增, 则: 传值的时候, 可以直接传入null, 系统会根据最大主键值 +1, 然后存储.
4. 如果同时添加多行值, 多组值之间用逗号隔开, 最后一组值的后边写分号.
*/
-- 1. 添加单条数据.
insert into student(id, name, gender, age) values(1, '李', '男', 33);
insert into student(name, age) value('孟', 30);
insert into student(gender, age) value('男', 21); -- 报错, 姓名不能为空
insert into student(name,gender, age) value('宋', '女', 21); -- 正确
-- 2. 同时添加多条数据.
insert into student values
(1, '朱', '女', 30),
(2, '林', '女', 24),
(3, '赵', '女', 19);
-- 注意: 在进行修改或者删除操作的时候, 一定要加where条件.
# -------------------- 案例2: DML语句 操作数据表 改 --------------------
-- 格式: update 表名 set 字段名1=新值, 字段名2=新值... where 条件;
update student set id=10, name='萧' where id = 1;
-- 如果不写where条件, 一下子改变所有.
update student set id=1, name='崖';
# -------------------- 案例3: DML语句 操作数据表 删 --------------------
-- 格式: delete from 表名 where 条件;
delete from student where age > 25;
-- 不写where条件, 一次删除所有.
delete from student;
# -------------------- 扩展: DQL语句 操作数据表 查 --------------------
-- 简单查询, 查询表中所有的数据.
-- select * from testdb.student; # 数据库名.数据表名
select * from student; # 如果直接写数据表用, 默认用的是 当前库中的表.