首页 > 数据库 >MySQL基础

MySQL基础

时间:2024-07-30 21:28:22浏览次数:9  
标签:salary -- 基础 查询 MySQL WHERE SELECT staff

MySQL默认情况下在查询和操作数据库对象时,不区分大小写:

  1. 对于表名、列名和数据库名,MySQL不会区分大小写。例如,"mytable"、"MyTable"和"MYTABLE"都被视为相同的表名。

  2. 在SQL语句中,关键字和函数名不区分大小写。例如,"SELECT"、"select"和"Select"都是等效的。

  3. 在默认情况下,MySQL对于字符串比较是不区分大小写的。例如,"abc"和"ABC"被认为是相等的。

请注意,虽然MySQL不区分大小写,但在比较字符串时,它仍然遵循二进制字符集的规则。这意味着在某些字符集中,它可能会区分大小写(例如,对于拉丁字符集)。


DML(数据操作语言)

新增

指定列添加单行数据 VALUE

INSERT INTO staff(id,`code`,`name`,salary) VALUE
(2,'1002','李四',9000);

添加多行数据 VALUES

其中id为自动递增列,可以不指定:

INSERT INTO staff(code,name,salary) VALUES
('1003','王五',10000),
('1004','赵六',11000);

注:自动递增列递增的值在删除后不会回撤,也不会补齐,从该列和已记录的最大值继续递增

NOT NULL 的列必须指定数据:code列要求非空

也可以不指定列,但需要将全部列(包括自增列)指定数据

-- 可以不指定列,但是需要将全部列指定数据
INSERT INTO staff VALUE(6,'1006','杜甫',12000);

删除

删除表用 DROP

删除记录用 DELETE

-- 删除		delete
delete from staff where id=6

修改

修改/编辑 UPDATE

-- 修改/编辑	UPDATE
UPDATE staff set name='李清照' where id=5
UPDATE staff SET salary=salary+2000 WHERE name='赵六'

UPDATE staff SET name='苏轼',salary=salary-2000 WHERE id=4

清空表

delete from staff;   -- 删除掉每一行数据
TRUNCATE staff; 	 -- 清空表,数据量比较大的时候truncate快,性能更快一些

DQL(数据查询语言)

简单查询

查询 SELETE

不止可以查询表中数据,也可以查询获取一个常量,或调用返回一个方法的值,如当前时间:

查询表格:指定列名查询,也可以使用星号 * 指代所有的列

-- 指定列名查询
SELECT name,salary from staff
-- 可以使用*代替所有的列
SELECT * from staff

可以使用 AS 对列、方法结果、表、视图等指定别名

-- 使用as 指定别名,对列,方法结果,表,视图
SELECT name as `姓名` from staff

使用 WHERE 指定条件语句,   !=  和 <> 都是不等于

-- where 指定条件语句
SELECT * from staff where id=4
-- 不等于
SELECT * from staff WHERE id != 1
SELECT * from staff WHERE id <> 1
-- 大于小于
SELECT * from staff WHERE id > 3;
select * from staff WHERE id >=3;
select * from staff WHERE id < 4;
SELECT * from staff WHERE id <= 4;

对null值的判断:不可以直接用某个数据=null表示

-- 对null值的判断
#SELECT * from staff WHERE salary=null; --不可以
SELECT * from staff WHERE salary is null;
SELECT * FROM staff WHERE salary <=> null;    -- 等于null
SELECT * FROM staff WHERE salary is NOT null;

多条件判断 使用 AND 和 OR

-- 多条件
SELECT * FROM staff WHERE id<5 AND salary>10000;
SELECT * FROM staff WHERE salary>10000 OR salary<9000;

某个值在不在...当中 IN...

-- in  not in 在不在...当中
#SELECT * FROM staff WHERE id=1 OR id=3...
SELECT * FROM staff WHERE id in(1,3,5,7,8,10,12);
SELECT * FROM staff WHERE id not in(1,3,5,7,8,10,12);

范围判断在...之间(包括边界值)BETWEEN ... AND...

-- BETWEEN AND 范围判断在..之间,包括边界
SELECT * FROM staff WHERE salary BETWEEN 8000 AND 10000;


模糊查询

模糊查询用 LIKE

%指代任意个数的字符, 下划线 _ 代表有且只有一个字符

-- 模糊查询	LIKE  %任意个数字符  _代表有且只有一个字符
SELECT * from staff where name LIKE '%李%';
-- 姓张的员工
SELECT * from staff where name LIKE '张%';
-- 张某
SELECT * from staff where name LIKE '张_';

是否存在 EXISTS

EXISTS 类似于一把锁,后面能查出结果,前面的语句才会给结果


 

SELECT * FROM staff WHERE 
EXISTS(SELECT * FROM staff WHERE id=1)

ANY 指任意一个数值

ALL 指全部数值

-- any all 
SELECT * from staff 
WHERE salary> ANY(SELECT code from staff)	-- 大于任意一个数值,不同类型另有比较规则

SELECT * from staff 
WHERE salary> ALL(SELECT code from staff)	-- 大于全部数值

当比较的前后类型不一致时可能另有比较规则而导致实际结果和理想结果有偏差


排序 ORDER BY

正序 ASC,倒序 DESC

注意,需要排序的每一列都需要单独指定排序方式,没指定则默认正序ASC

-- 排序 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;
-- 每一个列都需要指定排序顺序,没指定就默认asc
SELECT * FROM staff ORDER BY salary,code DESC;

拼接(合并)查询结果

UNION 会将重复的结果去除

UNION ALL 将完整结果全部合并,不会去重

-- 拼接(合并)查询结果
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;

部分查询 LIMIT

-- 部分查询 LIMIT 3 查询前三名
SELECT * from staff ORDER BY salary DESC LIMIT 3;
-- 查询第三到五名	limit start,count
SELECT * FROM staff ORDER BY salary DESC LIMIT 2,3;

limit的取值类似于数组,跟一个参数3表示保留查询结果的前三个;

两个参数 2,3 表示,从下标为2的(第三个)数据开始,取三个数据。


在SQL语句中,CASE WHEN THEN是一种条件表达式,用于根据不同的条件返回不同的结果

可以使用AS为返回的结果起一个别名

-- case when THEN
SELECT * ,case
when salary<10000 then '薪资较低'
WHEN salary>=10000 and salary<=20000 then '薪资正常'
ELSE '薪资较高'
end as `LEVEL` from staff;

SELECT *,case salary when 12000 then '还行'
WHEN 15000 THEN '还可以'
WHEN 18000 then '挺高'
when 20000 then '哇哦'
when 26000 then '好厉害'
END as `level`
from  staff;

聚合函数

最大值MAX、最小值MIN、平均数AVG、求和SUM、个数COUNT

-- 分组 聚合函数
-- 最大值
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;

分组查询 GROUP BY

分组查询的 select 后面只能是分组的列以及聚合函数

-- 分组查询
-- SELECT 后面只能是分组的列以及聚合函数
SELECT department,AVG(salary) as 平均薪资,
SUM(salary) as 薪资总和 
FROM staff GROUP BY department;

分组筛选 HAVING

对分好的组在筛选出符合条件的组

-- 分组筛选
-- HAVING 对分组之后数据再筛选
SELECT department FROM staff GROUP BY department
HAVING AVG(salary)<12000;

使用列名传入聚合函数,当计算的数据中包含null值时,会直接把null值忽略,不计算在内。

传入星号* 和常量,则计算包括null值的整列所有数据

-- null值忽略
-- 列名忽略null
SELECT department,AVG(salary),COUNT(salary),COUNT(*) FROM staff GROUP BY department;
-- 用*和常量计算整列所有数据,包括null值
SELECT COUNT(*),count(1) FROM staff;


在SQL语句中,层层筛选的优先级逻辑是指按照特定的顺序和条件对数据进行筛选和过滤的规则。这些规则决定了SQL语句的执行顺序和筛选结果。

以下是SQL语句中层层筛选的优先级逻辑的一般规则:

  1. FROM子句:首先,根据FROM子句指定的表来确定查询的数据源。这是查询的基础,决定了可用的列和数据。

  2. WHERE子句:在FROM子句确定数据源后,WHERE子句将应用筛选条件。它过滤掉不符合条件的行,只保留满足条件的行

  3. GROUP BY子句:如果存在GROUP BY子句,数据会按照指定的列进行分组。这将影响聚合函数的计算和结果集的形式。

  4. HAVING子句:在GROUP BY子句确定分组后,HAVING子句将应用筛选条件。它过滤掉不符合条件的分组,只保留满足条件的分组

  5. SELECT子句:在所有筛选和聚合操作完成后,SELECT子句将指定要返回的列。它可以包含聚合函数,计算衍生列,指定别名等。

  6. ORDER BY子句:最后,ORDER BY子句将根据指定的列对结果进行排序,可以按升序或降序排列。


多表连查

所用数据库表内容参考:

 Mysql经典练习题50题icon-default.png?t=N7T8https://blog.csdn.net/original_recipe/article/details/91958663连接查询

分为外连接、内连接以及交叉连接

外连接1.左外连接    LEFT JOIN

-- 老师的姓名以及教授的课程
-- 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;

              2.右外连接    RIGHT JOIN


              3.全外连接    FULL JOIN

左连接以左表为主表,会显示所有的数据,右表为附表,只会显示和主表有对应关系的数据;右连接相反全外连接mysql默认不支持,但可以通过合并查询UNION实现相同的效果。

内连接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

子查询

在增删改查的SQL语句中,包含的另一个查询语句叫做子查询。子查询可以当作一个表进行查询。

-- 子查询
SELECT sname FROM student WHERE sid in (
	SELECT sid FROM sc WHERE score<60
)
-- 将子查询当做表进行查询
SELECT sname from (SELECT * from student WHERE sid=01) as b 

练习:

1.查询学过「张三」老师授课的同学的信息

SELECT a.* from student as a LEFT JOIN
sc b on a.sid=b.sid
left JOIN course c on c.cid=b.CId
LEFT JOIN teacher d on c.tid=d.tid
WHERE d.tname='张三'

2.查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩

SELECT a.sid,sname,b.avgs from student as a
join (SELECT sid,AVG(score) as avgs FROM sc GROUP BY sid HAVING avg(score)>=60) b on a.sid=b.sid 

标签:salary,--,基础,查询,MySQL,WHERE,SELECT,staff
From: https://blog.csdn.net/qq_63161848/article/details/140804318

相关文章

  • Java基础知识分享(二)
    写在前面昨天给了十题编程题,如果你能有思路很快速地完成它,说明你的Java数据类型、运算符、选择语句、循环语句部分的基础知识很好,接下来就来看看后面的方法、数组以及他们在JVM中的内存划分知识吧!方法语句定义格式:修饰符返回值类型方法名(参数类型参数名,参数类型参数名,......
  • [Java基础]值传递
    Java值传递详解开始之前,我们先来搞懂下面这两个概念:形参&实参值传递&引用传递形参&实参方法的定义可能会用到参数(有参的方法),参数在程序语言中分为:实参(实际参数,Arguments):用于传递给函数/方法的参数,必须有确定的值。形参(形式参数,Parameters):用于定义函数/方法,接收实参,不需要......
  • 多项式基础内容小记
    0.基础知识:关于多项式的定义:多项式:一个形如\(f(x)=\sum_{i=0}^na_ix^i\)的有限和式被称为多项式。系数:多项式第\(i\)项的系数在上面就表示为\(a_i\)。度(次数):多项式中最高次数的项的次数就被称为该多项式的度,也称次数。多项式表示法:多项式有两种表示法:......
  • java基础题(附答案)(第二天的知识点预热)
    一、填空题Java语言规定标识符由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字。Java中整型变量有byte、short、int和long四种,不同类型的整数变量在内存中分配的字节数不同,数值范围也不同。对于int型变量,内存分配4个字节。在Java中浮点型变量有fl......
  • 【第二节】python编程基础语法
    目录一、运算符介绍1.1算术运算符1.2比较运算符1.3赋值运算符1.4位运算符1.5逻辑运算符1.6成员运算符1.7身份运算符二、python运算符优先级三、三大流程结构四、列表五、元组六、字典一、运算符介绍1.1算术运算符1.2比较运算符1.3赋值运算符......
  • Java基础知识
    Java基础知识一、第一个java程序二、Java中标识符的使用三、Java中的数据类型1.基本数据类型2.引用数据类型3.String类型变量的使用(字符串类型)四、Java中的运算符1.算数运算符2.赋值运算符**3.比较运算符****4.逻辑运算符****5.位运算符****6.三元运算符**一、第一......
  • redis基础
    下面资料来自黑马程序员-整理课程内容Redis入门Redis数据类型Redis常用命令在Java中操作Redis1.Redis入门1.1Redis简介Redis是一个基于内存的key-value结构数据库。Redis是互联网技术领域使用最为广泛的存储中间件。官网:https://redis.io中文网:https://www.redis.n......
  • [Mysql-事务]
    目录事务是什么:简单事务实现举例:事务ACID原则:事务隔离性事务的隔离级别:锁分类:事务是什么:        事务(Transaction),就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。简单事务实现举例:        就像现......
  • python_爬虫基础
    python爬虫基础1、初识爬虫1.rebots协议网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,但它仅仅是互联网中的约定而已,可以不用遵守。例如:https://www.taobao.com/robots.txt2.谷歌浏览器插件●XPathHelper●WebScraper●ToggleJavaScript●User-......
  • 【MySQL(锁篇)】深入MySQL锁机制:从全局到行级,解锁数据库性能瓶颈(上:MySQL锁介绍、表级锁
    文章目录MySQL(锁篇)-全局锁、表锁、行锁(记录锁、间隙锁、临键锁、插入意向锁)、意向锁、SQL加锁分析、死锁产生原因与排查一条Update语句MySQL锁介绍1锁分类2全局锁表级锁1什么是表级锁?2表读锁、写锁2.1表锁相关命令2.2表锁演示3元数据锁3.1元数据锁介绍3.2元......