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;

  • 相关阅读:
    BFC
    js常用
    uploadify上传文件
    android初探
    springMVC
    java虚拟机
    java编程思想
    eclipse中创建maven项目
    struts2、spring和mybatis整合理解
    struts,spring和mybatis框架整合
  • 原文地址:https://www.cnblogs.com/roddy/p/4799665.html
Copyright © 2011-2022 走看看