一、SQL简介
SQL(Structured Query Language 结构化查询语句)是一种特定目的程序语言,用于管理关系数据库管理系统(RDBMS),或在关系流数据管理系统(RDSMS)中进行流处理。
SQL基于关系代数和元组关系演算,包括一个数据定义语言和数据操纵语言。SQL的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。
同时也是数据库脚本文件的扩展名,SQL对大小写不敏感,他不是数据库。
二、SQL分类
可以把 SQL 分为两个部分:
DML:Data Manipulation Language 数据操作语言
DDL:Data Definition Language 数据定义语言
但是 SQL 语言也包含用于更新、插入和删除记录的语法。
查询和更新指令构成了 SQL 的 DML 部分:
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
SQL 中最重要的 DDL 语句:
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
三、My Sql 学习
常见数据排行榜 DB-Engines 2021年统计
为什么选择mysql?:免费 功能强大
3.1 环境搭建:点击此处
开始学习了~~~
一、DDL操作数据库
1.1 创建数据库
1. 【强制】库的名称必须控制在 32 个字符以内,相关模块的表名与表名之间尽量提现 join的关系,如 user 表和 user_login 表。
2. 【强制】库的名称格式:业务系统名称_子系统名,同一模块使用的表名尽量使用统一前缀。
3. 【强制】一般分库名称命名格式是“库通配名_编号”,编号从“0”开始递增,比如“wenda_001”以时间进行分库的名称格式是“库通配名_时间”
4. 【强制】创建数据库时必须显式指定字符集,并且字符集只能是 utf8 或者 utf8mb4创建数据库 SQL 举例:Create database db1 default character set utf8;
-- 创建数据库 CREATE DATABASE 数据库名;
-- 判断数据库是否已经存在,不存在则创建数据库 CREATE DATABASE IF NOT EXISTS 数据库名;
-- 创建数据库并指定字符集 CREATE DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
练习:1.判断数据库是否存在 ,不存在创建一个数据库Test_(你的名字字母) 指定字符集为utf-8
1.2 注释
1.3 查看数据库
-- 查看所有的数据库 show databases; -- 查看某个数据库的定义信息 show create database db3; show create database db1;
1.4 修改数据库
-- 修改数据库默认的字符集 ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
练习:将TestDB_001 数据库字符集修改成utf8mb4
1.5 删除数据库
DROP DATABASE 数据库名;
1.6 使用数据库
-- 查看正在使用的数据库 SELECT DATABASE(); -- 使用的一个 mysql 中的全局函数 -- 使用/切换数据库 USE 数据库名;
二、DDL操作表结构
CREATE TABLE 表名 ( 字段名 1 字段类型 1, 字段名 2 字段类型 2 );
2.2 MySql常见数据类型
详细数据类型:参考此处
如:创建一个student学生表 包含id,name,birthday字段
create table(
id int, -- 整数 name varchar(20), --字符串 给20个 birthday date -- 日期 最后一个字段可以省略逗号不写 );
2.3 查看表
-- 查看某个数据库中的所有表 SHOW TABLES; -- 查看表结构 DESC 表名; -- 查看创建表的 SQL 语句 SHOW CREATE TABLE 表名;
2.4 快速创建一个相同得表结构
-- 创建一个 s1 的表与 student 结构相同 create table s1 like student;
2.5 删除表
-- 直接删除表 DROP TABLE 表名;
-- 判断表是否存在,如果存在则删除表 不存在不删除 DROP TABLE IF EXISTS 表名;
2.6 修改表结构
-- 添加表列ADD ALTER TABLE 表名 ADD 列名 类型;
练习:为学生表添加一个新字段remark,类型为varchar(20)
-- 修改列类型 MODIFY ALTER TABLE 表名 MODIFY 列名 新的类型;
练习:将学生表得remark字段类型 修改为varchar(100)
-- 修改列名 CHANGE ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
练习:将学生表得remark字段 修改为intro varchar(30)
-- 删除列 DROP ALTER TABLE 表名 DROP 列名;
练习:将学生表得intro字段 删除
-- 修改表名 RENAME TABLE 表名 TO 新表名;
练习:将学生表表名修改为stu
-- 修改字符集 character set ALTER TABLE 表名 character set 字符集;
练习:将学生表字符集 修改为gbk
三、DML 表数据
3.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, ...);
UPDATE 表名 SET 列名=值 WHERE 条件表达式 UPDATE: 需要更新的表名 SET: 修改的列值 WHERE: 符合条件的记录才更新 你可以同时更新一个或多个字段。 你可以在 WHERE 子句中指定任何条件。
-- 不带条件修改数据 UPDATE 表名 SET 字段名=值; -- 修改所有的行
-- 带条件修改数据 UPDATE 表名 SET 字段名=值 WHERE 字段名=值;
练习:将所有学生表性别sex修改为女
练习:将id为2得学生性别修改为男
练习:将id为3得学生年龄修改为18,address 修改为北京
3.3 删除表数据
DELETE FROM 表名 WHERE 条件表达式 -- 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。你可以在 WHERE 子句中指定任何条件
-- 不带条件删除数据 DELETE FROM 表名; -- 带条件删除数据 DELETE FROM 表名 WHERE 字段名=值; -- 使用 truncate 删除表中所有记录 TRUNCATE TABLE 表名;
注:truncate 和 delete 的区别:truncate 相当于删除表的结构,再创建一张表。
3.4 查询数据 *
SELECT 列名 FROM 表名 WHERE 条件表达式 1) SELECT 命令可以读取一行或者多行记录。 2) 你可以使用星号(*)来代替其他字段,SELECT 语句会返回表的所有字段数据 3) 你可以使用 WHERE 语句来包含任何条件。
3.4.1 普通查询
-- 查询表所有行和列的数据,使用*表示所有列 SELECT * FROM 表名; -- 查询指定列,查询指定列的数据,多个列之间以逗号分隔 SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;
3.4.2 指定列的别名进行查询
-- 使用关键字,使用别名的好处: 显示的时候使用新的名字,并不修改表的结构。 -- 对列指定别名 SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名; -- 对列和表同时指定别名 SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名 AS 表别名;
注:表使用别名的原因:用于多表查询操作
3.4.3 清除重复值
-- 查询指定列并且结果不出现重复数据 SELECT DISTINCT 字段名 FROM 表名;
3.4.5 查询结果 参与运算
注:参与运算的必须是数值类型
-- 某列数据和固定值运算 SELECT 列名 1 + 固定值 FROM 表名; -- 某列数据和其他列数据参与运算 SELECT 列名 1 + 列名 2 FROM 表名;
练习:准备数据:添加数学,英语成绩列,给每条记录添加对应的数学和英语成绩,查询的时候将数学和英语的成绩相加 求出总成绩
3.4.6 条件查询
-- 条件查询的语法 SELECT 字段名 FROM 表名 WHERE 条件; -- 流程:取出表中的每条数据,满足条件的记录就返回,不满足条件的记录不返回
准备数据
CREATE TABLE student3 ( id int, -- 编号 name varchar(20), -- 姓名 age int, -- 年龄 sex varchar(5), -- 性别 address varchar(100), -- 地址 math int, -- 数学 english int -- 英语 ); INSERT INTO student3(id,NAME,age,sex,address,math,english) VALUES (1,'马云',55,'男','杭州',66,78), (2,'马化腾',45,'女','深圳',98,87), (3,'马景涛',55,'男','香港',56,77), (4,'柳岩',20,'女','湖南',76,65), (5,'柳青',20,'男','湖南',86,NULL), (6,'刘德华',57,'男','香港',99,99), (7,'马德',22,'女','香港',99,99), (8,'德玛西亚',18,'男','南京',56,65);
运算符
select 字段名 from 表名 where 字段名 BETWEEN 最小值 and 最大值 ; select 字段名 from 表名 where 字段名 like '%值'
练习:
练习:
-- in 关键字,in 里面的每个数据都会作为一次条件,只要满足条件的就会显示 SELECT 字段名 FROM 表名 WHERE 字段 in (数据 1, 数据 2...);
练习:
1.查询 id 是 1 或 3 或 5 的学生
2.查询 id 不是 1 或 3 或 5 的学生
-- 范围查询 BETWEEN 值 1 AND 值 2 -- 表示从值 1 到值 2 范围,包头又包尾 -- 比如:age BETWEEN 80 AND 100 相当于: age>=80 && age<=100
练习:
-- like 关键字 LIKE 表示模糊查询 SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
练习:
1.查询姓马的学生
2.查询姓名中包含'德'字的学生
3.查询姓马,且姓名有两个字的学生