MySql基础

数据操作语言 (DML):

INSERT:用于向表中插入新行数据。添加数据中自动递增的列可以不指定,自动递增不会回撤,不会补齐,从最大值开始递增。可以不指定列但是需要将全部列指定数据。

DELETE:删除表中符合条件的行。

UPDATE:更新表中符合条件的行的数据。
查询语言 (MQL):

SELECT:用于从数据库中检索数据。
INSERT 语句:

插入单行数据和多行数据。

可选地指定列名进行插入。

自动递增列的处理。
DELETE 语句:

DELETE FROM table_name WHERE condition;用于删除满足条件的行。

TRUNCATE table_name;用于清空表的所有数据,比DELETE更高效。
UPDATE 语句:

更新符合条件的行的数据。

可以对列进行数学运算和字符串操作。
SELECT 语句:

SELECT 列名 FROM 表名 WHERE 条件:基本的数据检索。

使用通配符*选择所有列。

使用AS指定别名。(列,方法结果,表,视图)

使用ORDER BY对结果排序。

使用DISTINCT去重。对整个查询结果去重。
条件筛选:

使用WHERE子句指定条件进行筛选。

支持等于(=)、不等于(!=或者<>)、大于、小于、IN、BETWEEN、LIKE等操作符。

对NULL值的处理:使用IS NULL和IS NOT NULL。等于null(<=>)。

模糊查询:

占位符:%任意个数任意字符 。 _有且只有一个字符。
聚合函数:

COUNT():计算行数或符合条件的行数。count(列)时会忽略null,不计数,count(常量或者*),不忽略null值,计数。

SUM():计算列的总和。

AVG():计算列的平均值。

MAX():计算列的最大值。

MIN():计算列的最小值。

可以与GROUP BY结合使用,进行分组统计。
分组查询:

使用GROUP BY对数据进行分组。

使用HAVING对分组后的数据进行条件筛选,类似于WHERE但作用于分组后的结果集。
其他功能:

CASE WHEN:条件表达式,根据条件返回不同的值。

UNION:合并多个查询结果集,支持去重和不去重的操作。UNION ALL 不会去重。

是否存在 EXISTS:()中得不到内容,前面的查询不会返回结果,()能查到结果,前面的查询给出结果。

排序 order by:正序 asc 倒序 desc (默认正序)。

部分查询:查询第三到第五 LIMIT START,COUNT;(start是下标,从0开始)。

拼接(合并)查询结果:类型可以不同,数量必须相同,可以是不同表的查询。

sql 复制代码
-- DML 数据管理语言  对数据增删改
-- 新增
-- 指定列添加数据
INSERT INTO staff(id,code,name,salary) VALUE 
(2,'10002','李四',9000);
-- 自动递增列可以不指定
INSERT INTO staff(code,name,salary) VALUES
('10003','王五',10000),
('10004','赵六',11000);
-- 自动递增不会回撤,不会补齐  从该列最大值递增
-- not null 的列必须指定数据
INSERT INTO staff(code,name) VALUE ('10006','张三');
-- 可以不指定列但是需要将全部列指定数据
INSERT INTO staff VALUE(6,'10006','魏琛',12000);
-- 删除  DELETE (删除数据)
DELETE FROM staff WHERE id=2;
-- 修改/编辑 UPDATE
UPDATE staff SET name ='李清照' WHERE id =4;
UPDATE staff SET salary=salary+2000 WHERE name ='李清照';
UPDATE staff SET salary=salary-2000,`name`='aa' WHERE id=6;
-- 清空表  
DELETE FROM staff;-- 删除每一行数据
TRUNCATE staff;-- 清空表 性能更快
-- 查询  MQL
SELECT 1;
SELECT NOW();
-- 查询表格
-- 指定列名查询
SELECT `name`,salary FROM staff;
-- 可以使用*代替所有的列
SELECT * FROM staff;
-- 使用as指定别名(列,方法结果,表,视图)
SELECT `name` AS `姓名` FROM staff;
-- where 指定条件语句
SELECT * FROM staff WHERE id=3;
-- 不等于
SELECT * FROM staff WHERE id!=3;-- 或者id<>3
-- 大于小于
SELECT * FROM staff where id>4;
SELECT * FROM staff where id>=4;
SELECT * FROM staff where id<=4;
-- 对null的判断
SELECT *FROM staff WHERE salary=NULL;-- 错误
SELECT * FROM staff WHERE salary IS NULL;
SELECT * FROM staff WHERE salary IS NOT NULL;
-- 等于null
SELECT * FROM staff WHERE salary <=> NULL;
-- 多条件
SELECT * FROM staff WHERE id<=100 AND salary >=10000;
SELECT * FROM staff WHERE salary>11000 OR salary<10000;
-- in   not in 
SELECT * FROM staff WHERE id=1 OR id=3....
SELECT * FROM staff WHERE id IN(2,4,6,8);
SELECT * FROM staff WHERE id NOT IN(2,4,6,8);
-- BETWEEN AND
SELECT * FROM staff WHERE salary BETWEEN 200 AND 12000;
-- 模糊查询   占位符:%任意个数任意字符   _有且只有一个字符
SELECT * FROM staff WHERE `name` LIKE '%a%';
SELECT * FROM staff WHERE `name` LIKE '李';
SELECT * FROM staff WHERE `name` LIKE '李_';-- 李某
-- 是否存在 EXISTS
SELECT * FROM staff WHERE EXISTS (SELECT * FROM staff WHERE 1=2);-- ()中得不到内容,前面的查询不会返回结果
SELECT * FROM staff WHERE EXISTS (SELECT * FROM staff WHERE id=2);-- ()能查到结果,前面的查询给出结果
-- any all
SELECT * FROM staff WHERE salary > ANY(SELECT 25);
SELECT * FROM staff WHERE salary > ALL(SELECT 25);
-- 排序 order by 
SELECT * FROM staff ORDER BY salary;
-- 正序  asc  倒序  desc (默认正序)
SELECT * FROM staff ORDER BY salary asc;
SELECT * FROM staff ORDER BY salary desc;
SELECT * FROM staff ORDER BY salary asc,`code` DESC;
-- 拼接(合并)查询结果
-- 类型可以不同,数量必须相同
-- 可以是不同表的查询
SELECT `name`,salary FROM staff UNION 
SELECT `code`,`name` FROM staff;
-- UNION去重效果
SELECT `name`,salary FROM staff UNION 
SELECT `name`,salary FROM staff; 
-- UNION ALL 不会去重
SELECT `name`,salary FROM staff UNION ALL
SELECT `name`,salary FROM staff; 
-- 去重   DISTINCT  对整个查询结果去重
SELECT DISTINCT salary ,`name` FROM staff ;
-- 部分查询
-- 查询前两名
SELECT * FROM staff ORDER BY salary DESC LIMIT 2; 
-- 查询第三到第五   LIMIT START,COUNT;
SELECT * FROM staff ORDER BY salary DESC LIMIT 2,3;
-- CASE WHEN THEN
SELECT * ,CASE WHEN salary<10000 THEN '薪资较低' 
WHEN salary>=10000 AND salary<=12000 THEN '薪资正常'
ELSE '薪资较高'
END
FROM staff ;
SELECT * ,CASE salary WHEN 9000 THEN '还行'
WHEN 10000 THEN '还可以'
WHEN 11000 THEN '挺高'
WHEN 8000 THEN '不行'
WHEN 13000 THEN '牛'
END AS `level` FROM staff;
-- 分组   聚合函数 将多个数据聚合成一个
SELECT MAX(salary) FROM staff;-- 最大值
SELECT MIN(salary) FROM staff;-- 最小值
-- 计算平均数
SELECT AVG(salary) FROM staff;
-- 求和
SELECT SUM(salary) FROM staff;
-- 求个数
SELECT COUNT(salary) FROM staff;
-- 分组查询
SELECT department,AVG(salary) as 平均薪资 ,SUM(salary) AS 薪资和 FROM staff GROUP BY department;
-- 分组筛选
-- HAVING 对分组之后数据再筛选
SELECT department FROM staff GROUP BY department HAVING AVG(salary)<10000;
-- NULL
-- count(列)时会忽略null,不计数
-- count(常量或者*),不忽略null值,计数

链接查询 (JOIN):

左连接 (LEFT JOIN):会返回左表中的所有记录,即使右表中没有匹配的记录。右表没有匹配的记录将显示为NULL。

右连接 (RIGHT JOIN):与左连接相反,会返回右表中的所有记录,即使左表中没有匹配的记录。左表没有匹配的记录将显示为NULL。

内连接 (INNER JOIN):只返回两个表中有匹配的行。

全外连接 (FULL JOIN):MySQL不直接支持,但可以通过左连接和右连接的组合实现类似效果。

交叉连接 (CROSS JOIN):

返回两个表的笛卡尔积,即左表中每一行与右表中每一行的组合。不需要ON子句。

子查询 (Subquery):

可以作为一个表达式嵌入到另一个查询中。

可以用在SELECT、FROM、WHERE等子句中。

子查询一般用于限制结果集或者作为计算字段的数据源。

sql 复制代码
-- 链接查询
-- 老师的姓名以及教授的课程
-- teacher Tname     course cname 
-- teacher.tid=course.tid
SELECT tname ,cname FROM teacher LEFT JOIN course ON teacher.TId=course.TId;
-- AS 起别名
SELECT a.Tname,b.Cname FROM teacher AS a LEFT JOIN course as b ON a.TId=b.TId;
SELECT a.Tname,b.Cname FROM teacher AS a RIGHT JOIN course as b ON a.TId=b.TId;
-- 链接查询  外连接,内连接
-- 主表会显示所有的数据,附表只会显示和主表有关系的数据
-- 外连接:左外连接 LEFT JOIN 左表为主表
--         右外连接 RIGHT JOIN 右表为主表
--         全外连接 FULL JOIN (mysql默认不支持)
-- 内连接:INNER JOIN 也可以写作join
-- 只显示有对应关系的数据
SELECT a.Tname,b.Cname FROM teacher AS a INNER JOIN course as b ON a.TId=b.TId;
-- 交叉连接 CROSS JOIN
SELECT * FROM teacher a ,course b WHERE a.TId=b.TId ;
-- 子查询
SELECT sname FROM student WHERE sid IN (
SELECT sid FROM sc WHERE score<60);
-- 将子查询当作一个表进行查询
SELECT sname FROM (SELECT * FROM student WHERE sid=01) AS a;
相关推荐
dingdingfish17 分钟前
JSON 系列之1:将 JSON 数据存储在 Oracle 数据库中
oracle·json·database
苹果醋337 分钟前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
小蜗牛慢慢爬行38 分钟前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
hanbarger42 分钟前
nosql,Redis,minio,elasticsearch
数据库·redis·nosql
微服务 spring cloud1 小时前
配置PostgreSQL用于集成测试的步骤
数据库·postgresql·集成测试
先睡1 小时前
MySQL的架构设计和设计模式
数据库·mysql·设计模式
弗罗里达老大爷1 小时前
Redis
数据库·redis·缓存
仰望大佬0072 小时前
Avalonia实例实战五:Carousel自动轮播图
数据库·microsoft·c#
学不透java不改名2 小时前
sqlalchemy连接dm8 get_columns BIGINT VARCHAR字段不显示
数据库