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;
相关推荐
BearHan6 分钟前
Sqlsugar调用Oracle的存储过程
oracle·存储过程·orm
superman超哥21 分钟前
04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
数据库·oracle·性能优化·dba
engchina1 小时前
Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
数据库·python·neo4j
engchina1 小时前
使用 Cypher 查询语言在 Neo4j 中查找最短路径
数据库·neo4j
尘浮生1 小时前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
威哥爱编程1 小时前
SQL Server 数据太多如何优化
数据库·sql·sqlserver
小华同学ai1 小时前
AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具
数据库·信息可视化·开源
Acrelhuang2 小时前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网
Mephisto.java2 小时前
【大数据学习 | kafka高级部分】kafka的kraft集群
大数据·sql·oracle·kafka·json·hbase
Mephisto.java2 小时前
【大数据学习 | kafka高级部分】kafka的文件存储原理
大数据·sql·oracle·kafka·json