基本语法

select 查询的列 from 表名;

注意:

select 语句中不区分⼤⼩写,查询的结果放在⼀个表格中,表格的第1⾏称为列头,第2⾏开始是数据,类属于⼀个⼆维数组。

查询常量

select 常量值1,常量值2,常量值3;

mysql> select 1,'a';
+---+---+
| 1 | a |
+---+---+
| 1 | a |
+---+---+
1 row in set (0.00 sec)
查看表达式

select 表达式;

mysql> select 1+2,3*10,10/3;
+-----+------+--------+
| 1+2 | 3*10 | 10/3 |
+-----+------+--------+
| 3 | 30 | 3.3333 |
+-----+------+--------+
1 row in set (0.00 sec)
查询函数

select 函数;

mysql> select sum(1+2);
+----------+
| sum(1+2) |
+----------+
| 3 |
+----------+
1 row in set (0.00 sec)
查询指定字段

select 字段1,字段2,字段3 from 表名;

查询所有列

select * from 表名;

列别名

select 列 [as] 别名 from 表;

表别名

select 别名.字段,别名.* from 表名 [as] 别名;

注意

  • 建议别名前⾯跟上 as 关键字
  • 查询数据的时候,避免使⽤ select *,建议需要什么字段写什么字段

条件查询

select 列名 from 表名 where 列 运算符 值

条件查询运算符
  • 等于(=)
  • 不等于(<>、!=) # 两者意义相同,在可移植性上前者优于后者
  • 大于(>) # 字符按照 ASCII 码对应的值进⾏⽐较,⽐较时按照字符对应的位置⼀个字符⼀个字符的⽐较。
  • 小于(<)
  • 小于等于(<=)
  • 大于等于(>=)
逻辑查询运算符
  • AND(并且)

  • OR(或者)

  • like(模糊查询)

    • %:表⽰匹配任意⼀个或多个字符
    • _:表⽰匹配任意⼀个字符
  • BETWEEN ... AND(区间查询)# 可以提⾼语句的简洁度

  • IN 查询

    • in 后⾯括号中可以包含多个值,对应记录的字段满⾜ in 中任意⼀个都会被返回
    • in 列表的值类型必须⼀致或兼容
    • in 列表中不⽀持通配符
  • NOT IN 查询:与 IN 查询相反

  • NULL 值专用查询

    查询运算符、like 、between ... and 、in 、not in 对 NULL 值查询不起效

    • IS NULL (返回值为空的记录):select 列名 from 表名 where 列 is null;
    • IS NOT NULL(返回值不为空的记录):select 列名 from 表名 where 列 is not null;
  • <=> (安全等于):既可以判断NULL值,又可以判断普通的数值,可读性较低,⽤得较少

排序与分页

排序查询(order by)

select 字段名 from 表名 order by 字段1 [asc|desc], 字段2 [asc|desc];

  • 需要排序的字段跟在 order by 之后;
  • asc|desc 表⽰排序的规则(asc:升序,desc :降序,默认为 asc)
  • ⽀持多个字段进⾏排序,多字段排序之间⽤逗号隔开
排序方式
  • 单字段排序
  • 多字段排序
  • 按别名排序
  • 按函数排序
limit

limit ⽤来限制 select 查询返回的⾏数,常⽤于分页等操作

select 列 from 表 limit [offset,] count;

limit 中 offset 和 count 的值不能⽤表达式,只能够跟明确的数字(不能为负数)

分页查询:select 列 from 表名 limit (page - 1) * pageSize, pageSize;

分组查询

SELECT column, group_function,... FROM table
[WHERE condition]
GROUP BY group_by_expression
[HAVING group_condition];
  • group_function:聚合函数
  • group by expression :分组表达式,多个之间⽤逗号隔开。
  • group_condition :分组之后对数据进⾏过滤
分组中 select 后⾯只能有两种类型的列
  1. 出现在 group by 后的列
  2. 使⽤聚合函数的列
聚合函数

聚合函数对一组值执行计算并返回单一的值

  • max:求最大值
  • min:求最小值
  • sum:求累加和
  • avg:求平均值
  • count:统计行的数量
单字段分组

GROUP BY X # 意思是将所有具有相同X字段值的记录放到一个分组里

多字段分组

GROUP BY X, Y # 意思是将所有具有相同X字段值和Y字段值的记录放到一个分组里

分组前筛选数据

分组前对数据进⾏筛选,使⽤ where 关键字

分组后筛选数据

分组后对数据筛选,使⽤having 关键字

where 和 having 的区别

  • where 是在分组(聚合)前对记录进⾏筛选,⽽ having 是在分组结束后的结果⾥筛选,最

    后返回整个 sql 的查询结果。
  • 可以把 having 理解为两级查询,即含having 的查询操作先获得不含 having ⼦句时的sql查询

    结果表,然后在这个结果表上使⽤having 条件筛选出符合的记录,最后返回这些记录,因

    此,having 后是可以跟聚合函数的,并且这个聚集函数不必与 select 后⾯的聚集函数相

    同。
where & group by & having & order by & limit ⼀起协作

where、group by 、having 、order by 、limit 这些关键字⼀起使⽤时,先后顺序有明确的限

制,语法如下:

select 列 from
表名
where [查询条件]
group by [分组表达式]
having [ 分组过滤条件]
order by [排序条件]
limit [offset,] count;

注意:必须按照上⾯的顺序写 SQL 语句,否则报错

MySQL 常用函数汇总

MySQL 数值型函数
  • abs:求绝对值
  • sqrt:求二次方根
  • mod:求余数
  • ceil 和 ceiling:向上取整
  • floor:向下取整
  • rand:生成随机数
  • round:四舍五入
  • sign:返回参数的符号(正数:1 负数:-1 零:0)
  • pow 和 power:次方
  • sin:正弦
MySQL 字符串函数
  • length:返回字符串字节长度
  • concat:合并字符串
  • insert:替换字符串
  • lower:将字符串转换为小写
  • upper:将字符串转换为大写
  • left:从左侧截取字符串
  • right:从右侧截取字符串
  • trim:删除字符串两侧空格
  • replace:字符串替换
  • substr 和 substring:截取字符串
  • reverse:反转字符串
MySQL 日期和时间函数
  • curdate 和 current_date:返回当前系统日期

    mysql> select curdate();
    +------------+
    | curdate() |
    +------------+
    | 2021-02-28 |
    +------------+
    1 row in set (0.01 sec)
  • curtime 和 current_time:返回当前系统时间

    mysql> select curtime();
    +-----------+
    | curtime() |
    +-----------+
    | 20:02:42 |
    +-----------+
    1 row in set (0.00 sec)
  • now 和 sysdate:返回当前系统日期和时间

    mysql> select now();
    +---------------------+
    | now() |
    +---------------------+
    | 2021-02-28 20:03:22 |
    +---------------------+
    1 row in set (0.00 sec)
  • unix_timestamp:获取 UNIX 时间戳

    mysql> select unix_timestamp();
    +------------------+
    | unix_timestamp() |
    +------------------+
    | 1614513856 |
    +------------------+
    1 row in set (0.00 sec)
    # UNIX_TIMESTAMP(date) 若⽆参数调⽤,返回⼀个⽆符号整数类型的 UNIX 时间戳('1970-01-01 00:00:00'GMT 之后的秒数)
  • from_unixtime:时间戳转日期

    mysql> select from_unixtime(1614513856);
    +---------------------------+
    | from_unixtime(1614513856) |
    +---------------------------+
    | 2021-02-28 20:04:16 |
    +---------------------------+
    1 row in set (0.00 sec)
  • month:获取指定日期月份

  • monthname:获取指定日期月份的英文名称

  • dayname:获取指定日期的星期名称

  • dayofweek:获取日期对应的周索引(1 表⽰周⽇,7 表⽰周六)

  • week:获取指定日期是一年的第几周

  • dayofyear:获取指定日期在一年中的位置

  • dayofmonth:获取指定日期在一个月中的位置

  • year:获取年份

  • time_to_sec:将时间转换为秒值

  • sec_to_time:将秒值转换为时间格式

  • date_add 和 adddate:日期加法运算

  • date_sub 和 subdate:日期减法运算

  • addtime:时间加法运算

  • subtime:时间减法运算

  • datediff:获取两个日期的时间间隔

  • date_format:格式化指定日期

    mysql> select date_format(now(),'%Y-%m-%d %H:%i:%s') as time;
    +---------------------+
    | time |
    +---------------------+
    | 2021-02-28 20:16:11 |
    +---------------------+
    1 row in set (0.00 sec)
  • weekday:获取指定日期在一周内的索引(0:星期⼀ 6:星期日)

MySQL 流程控制函数
  • if:判断

  • ifnull:判断是否为空

  • case:搜索语句,类似于java 中的if..else if..else

    # ⽅式1:
    CASE <表达式>
    WHEN <值1> THEN <操作>
    WHEN <值2> THEN <操作>
    ...
    ELSE <操作>
    END CASE; # ⽅式2:
    CASE
    WHEN <条件1> THEN <命令>
    WHEN <条件2> THEN <命令>
    ...
    ELSE commands
    END CASE;

    子查询

    嵌套在 select 语句中的 select 语句,称为⼦查询或内查询。外部的 select 查询语句,称为主查询或外查询。

    子查询分类

    按结果集的⾏列数不同分类

    • 标量子查询(结果集中只有一行一列)

      SELECT * FROM employees a
      WHERE a. salary > (SELECT salary
      FROM employees
      WHERE last_name = 'Abel');
    • 列子查询(结果集中只有一列多行)

      SELECT a.last_name FROM employees a
      WHERE a. department_id IN (SELECT DISTINCT department_id
      FROM departments
      WHERE location_id IN (1400, 1700));
    • 行子查询(结果集中只有一行多列)

      SELECT * FROM employees a
      WHERE a. employee_id = (SELECT min (employee_id) FROM employees)
      AND salary = (SELECT max (salary) FROM employees);
    • 表子查询(结果集中有多行多列)

    按⼦查询出现在主查询中的不同位置分类

    • select 后⾯:仅仅⽀持标量⼦查询

      SELECT
      a.*,
      (SELECT count(*)
      FROM employees b
      WHERE b. department_id = a.department_id ) AS employee_num
      FROM departments a;
    • from 后⾯:⽀持表⼦查询

      将⼦查询的结果集充当⼀张表,要求必须起别名,否者这个表找不到。然后将真实的表和⼦查询结果表进⾏连接查询。

      SELECT
      t1.department_id,sa AS '平均⼯资',t2.grade_level
      FROM (SELECT department_id, avg (a. salary ) sa FROM employees a
      GROUP BY a.department_id ) t1, job_grades t2
      WHERE
      t1.sa BETWEEN t2.lowest_sal AND t2. highest_sal ;
    • where 或 having 后⾯:⽀持标量⼦查询(单列单⾏)、列⼦查询(单列多⾏)、⾏⼦查询(多列多⾏)

      in ,any ,some,all分别是⼦查询关键词之⼀

      • in :in 常⽤于 where 表达式中,其作⽤是查询某个范围内的数据
      • any 和 some⼀样:可以与 =、>、>=、<、<=、<> 结合起来使⽤,分别表⽰等于、⼤于、⼤于等于、⼩于、⼩于等于、不等于其中的任何⼀个数据
      • all:可以与=、>、>=、<、<=、<>结合是来使⽤,分别表⽰等于、⼤于、⼤于等于、⼩于、⼩于等于、不等于其中的其中的所有数据
    • exists 后⾯(即相关⼦查询):表⼦查询(多⾏、多列)

      • exists查询结果:1 或 0,exists 查询的结果⽤来判断⼦查询的结果集中是否有值;⼀般来说,能⽤exists的⼦查询,绝对都能⽤ in 代替,所以 exists ⽤的少
      • 和前⾯的查询不同,这先执⾏主查询,然后主查询查询的结果,在根据⼦查询进⾏过滤,⼦查询中涉及到主查询中⽤到的字段,所以叫相关⼦查询
      SELECT exists (SELECT employee_id FROM employees WHERE salary = 300000 ) AS 'exists返回1或者0';

    注意⼦查询中列的值为 NULL 的时候,外查询的结果为空(大坑)

    连接查询

    笛卡尔积(交叉连接)

    有两个集合 A 和 B,笛卡尔积表⽰ A 集合中的元素和 B 集合中的元素,任意相互关联产⽣的所有可能的结果。

    select 字段	from 表1,表2[, 表N]; 	        # 隐式交叉连接
    或者
    select 字段 from 表1 join 表2 [join 表N]; # 显示交叉连接
    内连接

    内连接相当于在笛卡尔积的基础上加上了连接的条件。当没有连接条件的时候,内连接上升为笛卡尔积。

    select 字段 from 表1 inner join 表2 on 连接条件;

    select 字段 from 表1 join 表2 on 连接条件;

    select 字段 from 表1, 表2 [where 关联条件];

    内连接也称为等值连接,结果为返回两张表都满足条件的部分

    外连接

    外连接涉及到 2 个表,分为:主表和从表,要查询的信息主要来⾃于哪个表,谁就是主表。外连接查询结果为主表中所有记录。如果从表中有和它匹配的,则显⽰匹配的值,这部分相当于内连接查询出来的结果;如果从表中没有和它匹配的,则显⽰ null 。

    外连接查询结果 = 内连接的结果 + 主表中有的⽽内连接结果中没有的记录

    左外连接

    取左边的表的全部,右边的表按条件,符合的显示,不符合则显示 null

    select 列 from 主表 left join 从表 on 连接条件;
    右外连接

    取右边的表的全部,左边的表按条件,符合的显示,不符合则显示 null

    select 列 from 从表 right join 主表 on 连接条件;
    全连接

    使用 full join 关键字,全连接返回左外连接和右外连接的结果

    select 列 from 从表 full join 主表 on 连接条件;
    自连接

    自连接是指使用表的别名实现表与其自身连接的查询方法。

MySQL 查询操作的更多相关文章

  1. MySQL查询操作——2

    -----------查询操作--------------------------- 查询表中的所有字段SELECT * FROM employees; 查询常量值SELECT 100;SELECT ...

  2. MYSQL查询操作 详细

    学习目标 1 掌握select查询所有字段.指定字段的数据 2 掌握消除重复行命令distinct 3 掌握as给字段.表起别名 4 掌握条件查询where后跟比较运算符.逻辑运算符的用法 5 掌握条 ...

  3. mysql查询操作之单表查询、多表查询、子查询

    一.单表查询 单表查询的完整语法: .完整语法(语法级别关键字的排列顺序如下) select distinct 字段1,字段2,字段3,... from 库名.表名 where 约束条件 group ...

  4. MySQL查询操作

    查询执行路径中的组件:查询缓存.解析器.预处理器.优化器.查询执行引擎.存储引擎SELECT语句的执行流程: FROM Clause --> WHERE Clause --> GROUP ...

  5. mysql查询操作1

    ##1.在已有的表中插入一行记录 insert into tb_name values("",""...); ##2.查询语句的框架和用法 select 字段名 ...

  6. MySQL查询操作select

    查找记录 SELECT select_expr [,select_expr ...] [ FROM table_references(表的参照) [WHERE where_condition](条件) ...

  7. C#参数化执行SQL语句,防止漏洞攻击本文以MySql为例【20151108非查询操作】

    为什么要参数化执行SQL语句呢? 一个作用就是可以防止用户注入漏洞. 简单举个列子吧. 比如账号密码登入,如果不用参数, 写的简单点吧,就写从数据库查找到id和pw与用户输入一样的数据吧 sql:se ...

  8. MySQL(三) 数据库表的查询操作【重要】

    序言 1.MySQL表操作(创建表,查询表结构,更改表字段等), 2.MySQL的数据类型(CHAR.VARCHAR.BLOB,等), 本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对 ...

  9. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

随机推荐

  1. 快速了解 JavaScript ES2019 的五个新增特性

    ES2019 规范是对 JavaScript 的一个较小的补充,但它仍然带来了一些有用的功能.本文将向你展示五个 ES2019 新增的特性,这些特性或许可以让你的编程轻松一点.这些特性包括 trimS ...

  2. Github Pages(io) + 域名重定向 (手把手教你搭建个人网站)

    好歹也成为了在读phd的人,拥有个人网站是个有排面有很必要的事儿~ 在这里利用Github Pages + 域名重定向,实现个人网站的光速搭建~ 1.0 Github Repositories 首先你 ...

  3. SpringCloud LoadBalancer灰度策略实现

    如何使用 Spring Cloud 2020 中重磅推荐的负载均衡器 Spring Cloud LoadBalancer (下文简称 SCL),如何扩展负载均衡策略? 你将从本文中获取到答案 快速上手 ...

  4. Axure常用操作备忘

    目录 前言 技巧 边框重合 复制对象文本居中 复制粘贴样式 文本自适应 给图形添加连接点 导出图片无空白 前言 下面列出Axure画图过程中曾经遇到过的问题,备忘一下,避免别人也走弯路,法布施一下~ ...

  5. 为Github的README.md生成目录的小工具

    1 概述 因为Github的README.md文件[TOC]不生效,因此封装了一个别人已封装好的JAR包供大家使用. 2 使用方法 用Java做的,只需要JDK11以上的环境: java -jar t ...

  6. ASP微信服务号H5客户登陆,且获取客户授权的用户基本信息

    ASP微信服务号H5客户登陆,且获取客户授权的用户基本信息是需要客户授权,下面讲解详细步骤: 第一步:客户点击登录页,自动跳转到微信服务器端获取code 第二步:用第一步获取的code去获取客户的ac ...

  7. 1.7.6- 浏览器审查HTML标签元素

    或者F12

  8. Flyway-数据库迁移工具

    一.什么是Flyway? Flayway是一款数据库版本控制管理工具,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里:不仅支持Command Line和jav ...

  9. ZOJ3715 竞选班长求最小花费

    题意:       有n个小朋友竞选班长,一号想当班长,每个人都必须选择一个人当班长,并且不可以选择自己,并且每个人都有一个权值ai,这个权值就是如果1想让这个人改变主意选择自己当班长就得给他ai个糖 ...

  10. 半自动二进制协议模糊工具 Peach 使用

    链接:https://bbs.ichunqiu.com/thread-54487-1-1.html