Mysql基础篇之SQL语句

来源:互联网 发布:排名优化软件 编辑:程序博客网 时间:2024/05/22 12:06

查询语句的基本结构:

select    字段列表     from      表名和视图列表   [where 条件表达式1 ,2,3……] [ group by 属性名1 [having 条件表达式 2]]   [order by 属性名2  [asc | desc]]

结构有点复杂,一点一点来看。

order by 关键字,是指按照后面关键字来排序,desc是降序,asc升序,(不写的话默认升序)。比如有如下表

+-----+------+-------------+------+------+----------------+
| num | d_id | name        | age  | sex  | homeaddr       |
+-----+------+-------------+------+------+----------------+
|   1 | 1001 | 张三        |   26 |    1 | 北京市海淀区   |
|   2 | 2004 | 李四        |   24 |    0 | 北京市昌平区区 |
|   3 | 3014 | 王五        |   25 |    1 | 湖南长沙市     |
+-----+------+-------------+------+------+----------------+

select * from stu order by num desc;
执行后得到:

+-----+------+------+------+------+----------------+
| num | d_id | name | age  | sex  | homeaddr       |
+-----+------+------+------+------+----------------+
|   3 | 3014 | 王五 |   25 |    1 | 湖南长沙市     |
|   2 | 2004 | 李四 |   24 |    0 | 北京市昌平区区 |
|   1 | 1001 | 张三 |   26 |    1 | 北京市海淀区   |
+-----+------+------+------+------+----------------+

mysql> select * from stu where num < 3 order by num desc;
写成这样就会少掉num为3的那条记录。但是顺序一定不能乱,where不能写后边。

where后面跟的条件表达式条件有:

比较                 =、<、<=、>、>=、!=、<>、!>、!<

指定范围             between and 、 not  between and

匹配字符             like、not like

是否空值             is NULL、is not NULL 

多个查询条件         and、or

<>是不等于,!>是不大于。

    in的作用是判断某个字段是否在集合里面比如where name in ('张三','李四')选出名字是张三或者李四的人。in前加个not就是名字不是张三也不是李四的人。

     like后面跟着待匹配的表达式值,比如where name like '张%'  匹配任何姓名以张开头的记录,百分号相当于任意多个字符(可以是0),也可以用'_'这个符号,匹配任意一个字符,对于匹配一个汉字要用两个字符,因为一个汉字占2个字节。

     如果结果字段内容有充分,希望去除充分用

select distinct 属性名 from stu;
    group by是将结果按照某个字段或者多个字段分组,字段中值相等的为一组。

    group by 属性名 [having 条件表达式] [with rollup]

    属性名就是用于分组标准的字段名;'having'表达式是用来限制分组后的显示,满足having后面条件表达式的结果才可以被显示。group by单独使用的话,只能显示每个分组的第一条记录,用处不大,需要与集合函数一起使用,比如:

select sex,group_concat(name) from stu group by sex;
得到:

+------+-------------------+

| sex  | group_concat(name)|

+------+-------------------+

|   0  | 李四              |

|  1   | 张三,王五    |

+------+-------------------+

with rollup会在记录最后一行加一条记录,是之前记录的总和(对于可以求和的求和,不能的得到NULL)

select sex,group_concat(name) from stu group by sex with rollup;
用这个语句得到:

select sex,group_concat(name) from stu group by sex with rollup;

+------+-----------------------------+
| sex  | group_concat(name) |
+------+-----------------------------+
|    0 | 李四                                  |
|    1 | 张三,王五                         |
| NULL | 李四,张三,王五           |
+------+-----------------------------+

子查询的意思是把一个查询的结果嵌套到另一个里面。比如:

select * from employee where d_id in(select d_id from department);
employee中对应在表department中的d_id的记录内容被选择出来。

0 0
原创粉丝点击