MySQL数据操作查询

1. 插入数据

  • insert into 表名(字段名1 , 字段名2 ,... ) values (值1 , 值2 , ...)
    或
    insert into 表名 values (值1 , 值2 , ......)
    第二种赋值方式要求括号内的值跟表中的字段一一对应。
    插入多行数据
     insert into 表名(字段1 , 字段2 ,......)values
    (值1 ,值2 ,......) ,(值1 ,值2 ,......) ,(值1 ,值2 ,......) ...
    

2. 删除数据

  • DELETE FROM 表名 WHERE 删除条件
    删除语句必须和where条件连用,不然会删除整张表的内容
    DELETE只删除数据,不会修改表的内容,AUTO_INCREMENT自增计数器也不会重置。
    
  • TRUNCATE TABLE 删除数据
    TRUNCATE TABLE会删除表中的所有行,表的结构、列、约束、索引等不会被改动。但会重新设置AUTO_INCREMENT自增计数器
    
  • DROP 删除表
    DROP TABLE [IF EXISTS] 表名
    直接把表删除掉,表的数据结构便不会存在。
    

3. 修改数据

  • UPDATE 表名 SET 列名1 = 值1 , 列2 = 值2 ... WHER 条件
    修改和删除一样,需要指定条件,不然会修改表中所有的数据。
    SET后边可以有多个列同时进行修改,之间用逗号隔开。
    

4. 查询数据

1. 语法:
SELECT <列名 | 表达式 | 函数 | 常量 > FROM 表名
[WHERE 条件查询表达式]
[ORDER BY  排序的列名 [ASC或DESC]]
2. 查询所有的数据行和列,可以使用 * 号
语法:select * from 表名
3. 查询中使用别名
语法:select studentNO AS 学生编号 from 表名
4. 空值查询
在SQL中用IS NULL (是空)或者 IS NOT NULL(不是空)来判断列值是否为空。
例如:select * from 表名 where name is null
5. LIKE 模糊查询
语法:SELECT * FROM 表名 WHERE 字段名 [NOT] LIKE ‘[% | _]字符串%’
%:代表任意长度的任意字符串。
_:代表一个长度的任意字符串。
6. IN (NOT IN)子查询
1. 使用IN关键字可以使用父查询匹配子查询返回的多个单个字段
例如:select * from 表名 where name in ('a' , 'b');查询出姓名是a和b的人员信息。
2. NOT IN 和 IN 相反。
7. EXISTS(NOT EXISTS)子查询
1. EXISTS子查询用来确认后边的查询是否继续进行,返回值是true或false。
2. EXISTS关键字后面的参数可以使任意的一个子查询,如果该子查询有返回行,则EXISTS查询结果为true,此时再执行外层的查询语句。
反之没有返回行,则EXISTS查询结果为false,此时不再执行外层的查询语句。
3. NOT EXISTS 和 EXISTS 相反。
8. 查询结果不重复 DISTINCT
语法:SELECT DISTINCT 列名1 FROM 表名
这样查询出来的列名1不会重复
9. WITH ROLLUP关键字
语法:在分组字段的基础上进行数据统计
SELECT 字段 , count(字段) from 表名 GROUP BY 字段    WITH ROLLUP;

例如查询消费记录,进行统计
在这里插入图片描述

10. 在查询中使用常量列
select name , '北京' from 表名

这时查询出来的结果会多出一个常量列
在这里插入图片描述

5. 常用函数

聚合函数
AVG():返回某字段的平均值
COUNT():返回某字段的行数
MAX():返回某字段的最大值
MIN():返回某字段的最小值
SUM():返回某字段的和
字符串函数
CONCAT(str1 , str2 ,... strn):连接字符串str1 , str2 ,... strn为一个完整字符串。
INSERT(str , pos , len , newstr):将字符串str从pos位置开始,len个字符长的子串替换为字符串newstr。
LOWER(str):将字符串str中的所有字符变为小写。
UPPER(str):将字符串str中的所有字符变为大写。
SUBSTRING(str , num , len):返回字符串str的第num个位置开始长度为len的子字符串。
时间函数
CURDATE():获取当前日期
CURTIME():获取当前时间
NOW():获取当前时间日期
WEEK(date):返回日期date为一年中的第几周
YEAR(date):返回日期的年份
HOUR(time):返回时间time的小时值
MINUTE(time):返回时间time的分钟值
DATEDIFF(date1 , date2):返回两个日期之间相隔的天数
ADDDATE(date , n):计算日期date加上n天后的日期
数学函数
CEIL(x):返回大于或等于数值x的最小整数
FLOOR(x):返回小于或等于数值x的最大整数
RAND():返回0~1之间的随机数

注:函数还有很多,需要使用的时候可以百度

6. ORDER BY(排序)

  1. 如果需要按照一定的顺序排列查询结果,就需要视同ORDER BY 来进行排序。可以指定ASC升序、DESC降序排列,ORDER BY默认是升序(ASC)排列。
    在这里插入图片描述
  2. ORDER BY还可以同时指定多个列排序,每个列之间用逗号分隔,并且可以在每个列后边单独的指定ASC或DESC。

7. GROUP BY(分组)

  1. 语法:SELECT 分组的列或聚合函数 FROM 表名 [WHERE 条件] GROUP BY 分组的列;
  2. 分组查询中SELECT后边的列一般只能是分组的列。
  3. Oracle 和 MySQL中的分组(GROUP BY)有什么区别?
    Oracle对于GROUP BY是严格的,所有要SELECT出来的字段必须在GROUP BY后边出现,否则会报错。而MySQL则不同,如果SELECT出来的字段在GROUP BY后面没有出现,那么会随机取出一个值,而这样查询出来的数据不准确,语义也不明确。
    在这里插入图片描述

8. HAVING 分组过滤

  1. 语法:SELECT 分组的列名或聚合函数 FROM 表名 GROUP BY 分组的列名 HAVING 条件
  2. 执行顺序
    WHERE → GROUP BY → HAVING
  3. having 其实和 where 用法一样,用来对条件的筛选,过滤。只不过where是分组前的条件筛选,having 是对分组后的条件筛选,having把分组后的每一组当成具体的一列,进行条件判断筛选。
  4. where只能判断表中存在的字段,having还可以判断表中不存在的字段(聚合函数算出来的数据)。

9. LIMIT 用来分页查询

  • 语法:SELECT * FROM 表名 LIMIT 1 ,5;
    语法:SELECT * FROM 表名 LIMIT  5;
    LIMIT:当后边只有一个数字时表示每页显示多少条数据,当后边有两个数字时,
    第一个数字表示从第几条数据开始显示(数据从0开始,输入1实则是从第二条开始),第二个数字表示每页显示多少条数据
    
  • 显示 n 页的数据,每页显示 m 条数据
    select * from 表名 limit (n - 1) * m , m;
    

10. 连接查询

1. 内连接查询:

  • 内连接使用INNER JOIN...ON关键字或WHERE字句来进行表连接
    select * from 表名1 INNER JOIN 表名2 ON 表名1.n = 表名2.n
    SELECT 字段 FROM 表名1 , 表名2 WHERE 表名1.n = 表名2.n
    

2. 外连接查询:

  • 左连接:select * from	表名1  LEFT JOIN  表名2  ON  表名1.n = 表名2.n
    左连接:select * from	表名1  RIGHT JOIN  表名2  ON  表名1.n = 表名2.n 
    
  • 自连接:自连接实际就是自己连接自己,物理上的一张表,逻辑上的两张表。例如员工值为表。

3. 合并查询

  • SELECT 语句 UNION|UNION ALL
    SELECT 语句1 UNION|UNION ALL;
    (UNION|UNION ALL:合并或合并全部)
    

11. 子查询

  1. 子查询语句可以嵌套在SQL语句中任何表达式出现的地方。
  2. 只出现在子查询中而没有出现在父查询中的表不能包含在输出列。
  3. 子查询实际就是查询套查询,层层嵌套,满足各种需求。

12. REGEXP 使用正则表达式进行查询

  • SELECT * FROM 表名 WHERE 字段 REGEXP '正则表达式字符'
    
  1. MySQL中的通配符和正则表达式的关系?
  • 相同点:都是用来进行字符串匹配,都可以进行模糊查询。
  • 不同点:
    通配符和LIKE关键字一起使用
    正则表达式和REGEXP关键字使用
    通配符使用范围有限,正则表达式使用灵活。一般开发都会经常使用正则表达式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值