6.单表查询

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必须单独指定。
  • 第一排序列为首排序列,仅当第一列值相同时,第二排序列才起作用。
欢迎个人转载,但须在文章页面明显位置给出原文连接;
未经作者同意必须保留此段声明、不得随意修改原文、不得用于商业用途,否则保留追究法律责任的权利。

【 CSDN 】:csdn.zxiaofan.com
【GitHub】:github.zxiaofan.com

如有任何问题,欢迎留言。祝君好运!
Life is all about choices! 
将来的你一定会感激现在拼命的自己!











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值