SQL语言基础【学习总结】
目录
一、SQL语句分类
二、DDL操作 数据定义语言
(1)DDL操作数据库
1.数据库的创建
2.数据库的查看/选择
3.数据库的修改
4.删除数据库
(2)DDL操作数据表
1.常用数据类型
2.创建表
3.查看表
4.删除表
5.修改表
修改表名
修改表的字符集
向表中添加列(add)
修改表中列的数据类型或长度(modify)
修改列名称
删除列
(3)DML操作表中数据
1.插入数据
2.更改数据
3.删除数据
一、SQL语句分类
1.数据定义语言:DDL
2.数据操作语言:DML
3.数据查询语言:DQL
4.数据控制语言:DCL
二、DDL操作 数据定义语言
(1)DDL操作数据库
1.数据库的创建
两种方式
/*第一种方式 直接指定数据库名,此方式使用默认字符集:latin1格式:create database 数据库名;
*/CREATE DATABASE db1;/*第二种方式 指定数据库名称,指定字符集一般指定为utf8格式:create database 数据库名 character set 字符集;*/CREATE DATABASE db1_1 CHARACTER SET utf8;
2.数据库的查看/选择
命令:
use 数据库名; 切换数据库
select database(); 查看当前正在使用的数据库
show databases; 查看有哪些数据库
show create database 数据库名; 查看一个数据库的定义信息
-- 切换数据库 从db1 切换到 db1_1
USE db1_1;
-- 查看当前正在使用的数据库
SELECT DATABASE();
-- 查看Mysql中有哪些数据库
SHOW DATABASES;
-- 查看一个数据库的定义信息
SHOW CREATE DATABASE db1_1;
(补充一点:mysql中有四个默认数据库,分别是
1. information_schema‘信息数据库:保存的是其他数据库的信息’、
2.mysql‘MySQL核心数据库:保存的是用户和权限相关的信息’、
3. performance_schema‘保存性能相关数据 监控MySQL的性能’、
4.sys‘记录了DBA所需要的一些信息,DBA是数据库管理员’)
3.数据库的修改
命令:
alter database 数据库名 character set 字符集; 数据库的字符集修改操作
例如:
-- 将数据库db1 的字符集 修改为 utf8
ALTER DATABASE db1 CHARACTER SET utf8;
4.删除数据库
drop database 数据库名; 从MySQL中永久删除某个数据库
(2)DDL操作数据表
1.常用数据类型
(
char类型和varchar类型:
char类型是固定长度的: 根据定义的字符串长度分配足够的空间。密码等固定长度可以用char。
varchar类型是可变长度的: 只使用字符串长度所需的空间
)
2.创建表
格式:
CREATE TABLE 表名(
字段名称1 字段类型(长度),
字段名称2 字段类型 注意 最后一列不要加逗号
);
例如:
/*表名:category表中字段:分类ID :cid ,为整型分类名称:cname,为字符串类型,指定长度20
*/-- 创建表
CREATE TABLE category(cid INT,cname VARCHAR(20)
);
复制表的结构(快速创建一个表结构相同的表)
例如:创建一个与test1表结构相同的test2表
CREATE TABLE test2 LIKE test1;
查看表的结构:
DESC test2;
3.查看表
-- 查看当前数据库中的所有表名
SHOW TABLES;
-- 显示当前数据表的结构
DESC category;
-- 查看创建表的SQL语句
SHOW CREATE TABLE category;
--查看表的内容
select * from 表名;
4.删除表
格式:
第一种:
drop table 表名; 永久的删除表
第二种:
drop table if exists 表名; 判断表是否存在, 存在就删除
例如
-- 直接删除 test 表
DROP TABLE test1;
-- 先判断 再删除
DROP TABLE IF EXISTS test;
5.修改表
修改表名
格式:
rename table 旧表名 to 新表名
例如:
将test1修改为test2
RENAME TABLE test1 TO test2;
修改表的字符集
格式:alter table 表名 character set 字符集
例如:将category表的字符集 修改为gbk
alter table category character set gbk;
(未完结 2023.10.22)
向表中添加列(add)
格式:alert table 表名 add 字段名称 字段类型
例如:向category表中添加一个新的字段为 分类描述 cdesc varchar(20)
ALTER TABLE category ADD cdesc VARCHAR(20);
修改表中列的数据类型或长度(modify)
格式:alter table 表名 modify 字段名称 字段类型
例如:
ALTER TABLE category MODIFY cdesc VARCHAR(50);
修改列名称
格式:alter table 表名 change 旧列名 新列名 类型(长度);
例如:
对分类表中的 desc字段进行更换, 更换为 description varchar(30)
ALTER TABLE category CHANGE cdesc description VARCHAR(30);
删除列
格式:after table 表名 drop 列名;
例如:
ALTER TABLE category DROP description;
(3)DML操作表中数据
首先为了验证下面操作,我们先创建一个student表
/*
表名:student
表中字段:
学员ID, sid int
姓名, sname varchar(20)
年龄, age int
性别, sex char(1)
地址, address varchar(40)
*/# 创建学生表
CREATE TABLE student(
sid INT,
sname VARCHAR(20),
age INT,
sex CHAR(1),
address VARCHAR(40)
);
1.插入数据
插入数据分为三种方式,其中把varchar,char,date的值必须用单引号或者双引号
方式1:插入全部字段,写出全部字段
INSERT INTO student (sid,sname,age,sex,address) VALUES(1,'孙悟空',20,'男','花果山');
方式2,插入全部字段,不写字段名
INSERT INTO student VALUES(2,'孙悟饭',10,'男','地球');
方式3:插入指定字段的值
INSERT INTO category (cname) VALUES('白骨精');
2.更改数据
格式1:不带条件(不建议使用)会修改所有的
update 表名 set 列名 = 值
UPDATE student SET sex = '女';
格式2:带条件
update 表明 set 列明 = 值 [where 条件表达式:字段名 = 值]
UPDATE student SET sex = '男' WHERE sid = 3;
格式3:修改多个值
UPDATE student SET age = 20,address = '北京' WHERE sid = 2;
3.删除数据
方式1:删除所有数据
格式:delete from 表名
方式2:删除指定条件数据
格式:delete from 表名 [where 字段名=值]
DELETE FROM student WHERE sid = 1;
(补充:delete from 表名 此方法原理是有多少记录就进行多少次删除
推荐使用: truncate table 表名 先删除整张表,然后再重新创建一张一模一样的表. 效率高)
(4)DQL查询表中数据
为了验证本部分内容,首先建立一个表(emp员工表),并加入数据
CREATE TABLE emp(
eid INT,
ename VARCHAR(20),
sex CHAR(1),
salary DOUBLE,
hire_date DATE,
dept_name VARCHAR(20)
);
1.简单查询
格式:select 列名 from 表名
方式一:查询全部字段
SELECT * FROM emp; -- 使用 * 表示所有列,查询所有数据
方式二:查询指定字段
SELECT eid,ename FROM emp; --仅显示eid和ename字段
方式三:别名查询,使用 AS关键字,为列起别名
SELECT eid AS '编号' FROM emp;
方式四:去重查询distinct
SELECT DISTINCT dept_name FROM emp;
方式五:运算查询(查询结果与运算)
SELECT ename,salary +1000 from emp; --将结果加1000
2.条件查询
格式:select 列名 from 表名 where 条件表达式
比较运算符:
逻辑运算符:
查询如下用例:
# 查询员工姓名为黄蓉的员工信息
SELECT * FROM emp WHERE ename = '黄蓉';
# 查询薪水价格为5000的员工信息
SELECT * FROM emp WHERE salary = 5000;
# 查询薪水价格不是5000的所有员工信息
SELECT * FROM emp WHERE salary != 5000;
SELECT * FROM emp WHERE salary <> 5000;
# 查询薪水价格大于6000元的所有员工信息
SELECT * FROM emp WHERE salary > 6000;
# 查询薪水价格在5000到10000之间所有员工信息
SELECT * FROM emp WHERE salary BETWEEN 5000 AND 10000;
# 查询薪水价格是3600或7200或者20000的所有员工信息
-- 方式1: or
SELECT * FROM emp WHERE salary = 3600 OR salary = 7200 OR salary = 20000;
-- 方式2: in() 匹配括号中指定的参数
SELECT * FROM emp WHERE salary IN(3600,7200,20000);
3.模糊查询
# 查询含有'精'字的所有员工信息
SELECT * FROM emp WHERE ename LIKE '%精%';
# 查询以'孙'开头的所有员工信息
SELECT * FROM emp WHERE ename LIKE '孙%';
# 查询第二个字为'兔'的所有员工信息
SELECT * FROM emp WHERE ename LIKE '_兔%';
# 查询没有部门的员工信息
SELECT * FROM emp WHERE dept_name IS NULL;
-- SELECT * FROM emp WHERE dept_name = NULL;
# 查询有部门的员工信息
SELECT * FROM emp WHERE dept_name IS NOT NULL;