6.单表查询

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: <div style="background-color:inherit"><span style="background-color:inherit"><span style="color:#00b050; background-color:inherit">1、语法格式</span></span></div> <div style="background-color:inherit"
1、语法格式
        select语句的功能就是查询数据,在SQL语句中功能最丰富,可单表查询、多表连接查询、子查询。

SELECT  NAMEgrade

FROM student

WHERE grade >80;

  • 数据源student可以是表、视图等;select后列表用于确定选择哪些列(* 即所有列),where确定选择哪些行(无则选出所有行)。
  • select语句中可使用算术运算符(+、-、*、/)形成算术表达式,用于数值型、日期型的数据列、变量、常量;运算符可在两列间进行运算。
  • 运算符优先级同Java。

SELECT  *

FROM student

WHERE age *3> grade;


2、字符串连接concat
        MySQL没有提供字符串连接运算符,即无法使用加号(+)将字符串常量、变量、列连接起来。可使用concat。

SELECT CONCAT(NAME,'-', age) # -记得加单引号

FROM student

WHERE age *4> grade;

  • 算术运算符使用null,将导致整个算术表达式的值为null
  • 字符串连接运算使用null,导致连接后的结果也是null。(如将上面的连接语句中的age改为null,则返回的结果与之前行数依旧相同,但值全为null)

3、别名as
  • 为数据列或表达式起别名时,别名紧跟数据列,中间以空格或关键字as隔开。

SELECT NAME AS alias

FROM student

WHERE age >20;

  • 别名使用特殊字符(如空格),或需要强制大小写敏感,都可通过别名加双引号来实现。

SELECT NAME AS "My'Name" …… #别名中有单引号时必须使用双引号,其余可使用单引号

  • 为多列起别名

SELECT

    NAME AS 'My Name',

    age AS 年龄

  • 为表其别名(语法相同)
  • 连接符、别名共用

SELECT

    NAME AS'My Name',

    CONCAT(grade,'-',math) grade1

FROM student

WHERE age >20;


4、dual虚表
  • selec、where子句可都不出现列名
SELECT  1 + 2   FROM  student   WHERE 1 < 3 ;
  • where总为true,selec仅仅选择了常量,SQL将其当成一列,student表中有多少条记录,该常量就出现多少次。
  • 选择常量时,指定数据表没有太大的意义,so MySQL扩展语法,允许select后没有from子句

SELECT 1+2; # 此时,返回结果只有一列,而不是表中有多少记录返回多少列了。

  • Oracle提供名为dual的虚表(没有任何意义,仅相当于from后的占位符),经测试(select version();)MySQL至少从5.1.58开始就已支持。

5、去重distinct
    select默认选出所有符合条件的记录,即使有两行一模一样。

SELECT DISTINCT

    NAME,

    age

FROM student;

  • distinct紧跟select
  • 上述语句选出name、age不同时相同的记录。

6、比较运算符
  • 值相等  单等号=
  • 不相等  <>
  • 赋值    冒号等号:=
  • ex1 between ex2 and ex3 表示ex2 =< ex1 <= ex2
  • ex in(ex1,ex2类似枚举,ex的值必须是括号里任一个表达式的值
  • like  字符串匹配,like后的字符串支持通配符
  • is null  要求指定值为null

使用注意:

ex1 between ex2 and ex3

  • ex2必须小于等于ex3,否则返回值为null;
  • ex2和ex3可以是常量变量,甚至是列名

    SELECT *

    FROM student

    WHERE  # 查询age小于等于20,grade大于等于20的数据。

        20 BETWEEN age  AND grade;

        
ex in(ex1,ex2
  • in括号内的值亦可常量、变量、列名。

    SELECT *

    FROM student

    WHERE  # 查询grademath为88的所有记录。

        88IN(grade, math);


like 模糊查询
  • SQL语句两个通配符下划线_(一个任意字符)百分号%(任意多个字符)

    SELECT *

    FROM student

    WHERE

        NAME LIKE '%'; #以“小”开头的所有记录

   #

NAME LIKE '_'; # 以“小”开头的两个字符的所有记录

  • 转义(查询条件需要下划线或百分号)
    MySQL使用反斜线(\)转义字符,LIKE '小\_',表示查询“小_”

    标准SQL没有提供反斜线的转义字符,而是使用关键字escape显示转义。

    LIKE '\_%' ESCAPE '\'; # 但MySQL不支持这种用法

is null

  • 判断值为空,不要用=null,因为SQL中null=null返回null。

    SELECT *

    FROM student

    WHERE # 查询id为空的记录

        id ISNULL;

    如将上面的is null改为=null,返回的结果将为空。


7、逻辑运算符 and、or、not

WHERE NAME LIKE'__'AND id >6# name为两个字符且id>6的记录

WHERE NOT NAME LIKE'__'; # name不是两个字符的记录


8、比较运算符、逻辑运算符优先级

所有比较运算符 > not > and> or

括号的优先级最高。


9、排序

查询结果默认按照插入顺序排列。 可用order by按值大小排列。

order by默认升序(asc),desc可改为降序。

SELECT *

FROM student

ORDERBY #按age升序排列,当age相同时,按grade降序排列。

    age,

    grade DESC;

  • 多列排序,则每列的asc、desc必须单独指定。
  • 第一排序列为首排序列,仅当第一列值相同时,第二排序列才起作用。











相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9月前
|
SQL 关系型数据库 MySQL
MySQL数据库练习题(单表查询,多表关联查询)(一)
MySQL数据库练习题(单表查询,多表关联查询)
424 0
|
10月前
|
存储 SQL 关系型数据库
大数据量下数据库分页查询优化方案汇总
当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。
350 2
|
9月前
|
关系型数据库 MySQL 数据库
MySQL数据库练习题(单表查询,多表关联查询)(二)
MySQL数据库练习题(单表查询,多表关联查询)(二)
158 0
|
3月前
|
SQL
深入了解关联查询和子查询
深入了解关联查询和子查询
26 0
|
6月前
|
SQL
SQL数据查询——单表查询和排序
SQL数据查询——单表查询和排序
65 0
|
9月前
|
关系型数据库 MySQL
MySQL查询之 联合主键
MySQL查询之 联合主键
168 0
|
12月前
|
SQL 缓存 关系型数据库
多表联查对比多次单表
只有聪明人才能看见的摘要~( ̄▽ ̄~)~
109 0
基础DQL(数据查询)——聚合函数&分组查询
基础DQL(数据查询)——聚合函数&分组查询
91 0
基础DQL(数据查询)——聚合函数&分组查询
基础DQL(数据查询)——条件查询
基础DQL(数据查询)——条件查询
95 0
基础DQL(数据查询)——条件查询
基础DQL(数据查询)—— 内连接、外连接、自连接(含实例)
在内连接的例子中,其实会有小的弊端,假设数据中相同属性的部门名称,或者是员工表内部门名称为空的话,就无法通过内连接查询出所有的数据(NULL值无法匹配),会造成一定的误差,所以我们就需要用到外连接来弥补一下。接下来我们就来认识一下外连接
164 0
基础DQL(数据查询)—— 内连接、外连接、自连接(含实例)