zoukankan      html  css  js  c++  java
  • MYSQL数据库学习----查询

    查询语句是MYSQL数据库中用到的最多的语句。

    查询语句分为几种

    1. 单表查询
    2. 集合函数查询
    3. 连接查询
    4. 子查询
    5. 合并查询
    6. 正则表达式查询

     

    一:单表查询

    SELECT 属性 FROM 表名 [WHERE 查询条件][GROUP BY 属性名1 [HAVING 分组条件]][ORDER BY 属性2 [ASC/DESC]][LIMIT];

    WHERE 查询条件

    查询条件 符号或关键字 例子
    比较 =、<、<=、>、>=、!=、<>、!>、!< WHERE ID = 1
    指定范围 BETWEEN AND、NOT BETWEEN AND WHERE ID BETWEEN 2 AND 3
    指定集合 IN、NOT IN WHERE ID IN(1,2,3)
    匹配字符 LIKE、NOT LIKE WHERE ID LIKE '1%'
    是否为空值 IS NULL、IS NOT NULL WHERE ID IS NULL
    多个条件查询 AND、OR WHERE ID > 1 AND ID <3

     

     

     

     

     

     

    这里说下LIKE,如果是WHERE ID LIKE 'ID' 这里LIKE等同与‘=’ 就是WHERE ID = 'ID'

    '%'可以代表任意长度字符串:WHERE ID LIKE 'I%',这里就是匹配以‘I’开头的任意长度字符串

    '_'可以代表一个字符:WHRER ID LIKE 'I_',这里就是匹配以‘I’开头的2个长度的字符串

     

    GROUP BY 属性1 分组

    按照属性分组,属性相同的分为一组,但是显示的时候只会显示出每组的第一条记录,所以单独的分组是没意义的,搭配集合函数使用效果会更好

    使用GROUP_CONCAT(属性)函数:会把分组中指定的属性列出来

    SELECT GROUP_CONCAT(ID) FROM DEMO GROUP BY SEX;

    使用COUNT(属性)函数:会计算分组中指定的属性个数

    SELECT COUNT(ID) FROM DEMO GROUP BY SEX;

    GROUP BY也可以按照多个属性分组

    GROUP BY 属性1,属性2,...:先按照属性1分组,如果属性1中有重复的记录再按照属性2分组,一次类推

    HAVING 分组条件

    HAVING和WHERE不一样,WHERE条件表达式是作用与表和视图中的,HAVING条件表达式是作用于分组后的数据,用于选择满足条件的组

    ORDER BY 属性2

    按照属性2对查询结果排序,默认的是升序排序

    ASC/DESC

    ORDER BY 后面可以设置排序方式

    ASC:升序排序,默认就是这个

    DESC:降序排序

    LIMIT

    限制查询结果显示数量

    LIMIT 2:只显示查询结果中的前2条记录

    LIMIT 2, 4:从查询结果中找到第3条记录开始,显示后面的4条记录,结果集下标从0开始算起。

     

    二:集合函数查询

    SELECT [[COUNT()][SUM()][AVG()][MIN()][MAX()]] FROM 表名

    COUNT(属性):计算属性记录的个数

    SUM(属性):计算属性取值的和

    AVG(属性):计算属性取值的平均值

    MIN(属性):得到属性取值的最小值

    MAX(属性):得到属性取值的最大值

     

    三:连接查询

    内连接查询:

    假如2个表中有表示相同意义的字段,可以通过内连接查询得到该字段在2个表中的结果集

    表1

    ID USER PWD

     

    表2

    USER TIME

     

    SELECT ID,表1.USER,PWD,TIME FROM 表1,表2 WHERE 表1.USER = 表2.USER

    得到结果集类似

    ID USER PWD TIME

     

    外连接查询:

    分为左连接查询和右连接查询,一般用的比较少,这里不做介绍

    四:子查询

    子查询语句就是将一个查询语句嵌套进一个查询语句中,内层查询语句结果可以作为外层查询语句的查询条件。

    子查询中包含比较运算符和一些关键字INNOT INANYALLEXISTSNOT EXISTS

    IN内层查询语句结果中包含外层查询语句条件的字段

    SELECT * FROM 表1 WHERE 字段1 IN (SELECT 字段1 FROM 表2);

    NOT IN和IN相反,这个就不多做描述

     

    ANY表示满足其中任意一个条件。只要内层查询语句返回的结果中的任何一个,就可以通过该条件来执行外层查询语句

    SELECT 字段1 FROM 表1 WHERE 字段1 [[<][=][>][<=][>=][<>][!=]] ANY (SELECT 字段1 FROM 表2);

    其实到这里IN关键字和ANY关键字在某种情况下是相同的:

    SELECT * FROM 表1 WHERE 字段1 IN (SELECT 字段1 FROM 表2);

    SELECT * FROM 表1 WHERE 字段1 = ANY (SELECT 字段1 FROM 表2);

     

    ALL表示满足其中全部条件。只要满足内层查询语句返回的结果中的全部条件,才可以通过该条件来执行外层查询语句。

    SELECT 字段1 FROM 表1 WHERE 字段1 [[<][=][>][<=][>=][<>][!=]] ALL (SELECT 字段1 FROM 表2);

    ANY 关键字和ALL关键字的意思是相反的,ANY是只要满足其中一个条件,ALL关键字是满足全部条件。

     

    EXISTS表示存在,使用EXISTS关键字时,内层查询语句不返回查询记录,而是返回一个真假值,如果为真(true)则执行外层查询语句,如果为假(false)则不执行外层查询语句。

     SELECT * FROM 表1 WHERE EXISTS (SELECT * FROM WHERE...);

    NOT EXISTS关键字和EXISTS关键字意思相反,这里就不多做描述。

     

    五:正则表达式查询

    待续。。。

     

    六:合并查询结果

    有时候我们要把两个SELECT语句查询得到的结果合并在一起,我们要用到UNIONUNION ALL关键字

    UNION合并两个SELECT语句查询结果,并且去掉重复的记录。

    UNION ALL合并两个SELECT 语句查询结果。

    SELECT ... [[UNION][UNION ALL]] SELECT ...

     

    七:为表和字段取别名

    在实际使用的时候有些表的名称和字段的名称都比较长,SELECT语句写出来显的有点臃肿或者不易于阅读,我们可以给表和字段取别名来解决这个问题。

    给表取别名表名 表的别名

    给字段取别名字段名 [AS] 字段的别名

    SELECT * FROM TABLE1 T1 WHERE T1.ID = 1;

    SELECT ID AS T1ID FROM TABLE1 WHERE T1ID = 1;

  • 相关阅读:
    springboot springcloud zuul 过滤器
    springboot springcloud eureka 熔断器
    javaweb servlet filter
    maven nexus 搭建私服(二)
    springboot springcloud zuul 网关入门
    springboot springcloud 配置中心
    springboot springcloud eureka 入门
    java rabbitmq
    java jvm调优
    maven nexus 搭建私服(一)
  • 原文地址:https://www.cnblogs.com/roddy/p/4799665.html
Copyright © 2011-2022 走看看