mysql 查询子句

样板

create database sky;

use sky;

create table m1(

id int(11),

name char(20),

age tinyint(10),

sex enum('男','女'),

score tinyint(10),

address char(20)

) default charset=utf8;

insert into m1 values

(1,'L1',21,'男',90,'北京'),

(2,'L2',19,'男',91,'上海'),

(3,'L3',24,'女',95,'广州'),

(4,'L4',22,'男',89,'广州'),

(5,'L5',20,'女',86,'上海'),

(6,'L6',19,'女',99,'广州');

执行顺序

1. select * from *

2. where 条件语句 #只筛选表里存在的字段

3. group by 分组

4. having 筛选

5. order by 排序高低

6. limit 显示几行,降序或者升序

group by

作用:给查询的结果进行分组,去重

1. group by 之后的字段必须为select之后的字段

2. 如果select 之后的字段和group by之后的字段不一致,则必须对select之后的字段做聚合处理。

筛选有几个城市

mysql> select address from m1 group by address;

+---------+

| address |

+---------+

| 上海    |

| 北京    |

| 广州    |

+---------+

3 rows in set (0.00 sec)

having

作用:对查询的结果进行进一步的筛选,只筛选通过计算出来的字段

1. having语句通常和group by语句联合使用,用来过滤group by语句返回的记录集

2. having语句的存在弥补了where关键字不能与聚合函数联合使用的不足

取出分数大于等于90前两名的城市

mysql> select address,avg(score) from m1

-> group by address

-> having avg(score) >= 90

-> order by avg(score) desc

-> limit 2;

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

| address | avg(score) |

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

| 广州    |    94.3333 |

| 北京    |    90.0000 |

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

2 rows in set (0.00 sec)

order by

作用:对查询的结果进行排序

语法:  order by 字段名  排序方法

排序方式:

ASC(默认) : 升序

DESC:降序

从高到低进行排序

mysql> select * from m1 order by score desc;

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

| id   | name | age  | sex  | score | address |

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

|    4 | L4   |   22 | 男   |   101 | 广州    |

|    6 | L6   |   19 | 女   |    99 | 北京    |

|    3 | L3   |   24 | 女   |    95 | 广州    |

|    2 | L2   | NULL | 男   |    91 | 上海    |

|    1 | L1   |   21 | 男   |    90 | 北京    |

|    5 | L5   | NULL | 女   |    86 | 上海    |

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

6 rows in set (0.00 sec)

显示address在北京和上海,age为20+,的人按score 升序

mysql> select * from m1

-> where

-> address in("北京","广州") and age like '2_'

-> order by score asc;

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

| id   | name | age  | sex  | score | address |

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

|    4 | L4   |   22 | 男   |    89 | 广州    |

|    1 | L1   |   21 | 男   |    90 | 北京    |

|    3 | L3   |   24 | 女   |    95 | 广州    |

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

3 rows in set (0.00 sec)

limit

作用:限制显示查询记录的条数

语法:

limit n 显示n条记录

limit m,n 从第m+1条记录开始显示,显示n条

score字段降序排列,显示前三名

mysql> select * from m1 order by score desc;

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

| id   | name | age  | sex  | score | address |

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

|    6 | L6   |   19 | 女   |    99 | 广州    |

|    3 | L3   |   24 | 女   |    95 | 广州    |

|    2 | L2   |   19 | 男   |    91 | 上海    |

|    1 | L1   |   21 | 男   |    90 | 北京    |

|    4 | L4   |   22 | 男   |    89 | 广州    |

|    5 | L5   |   20 | 女   |    86 | 上海    |

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

6 rows in set (0.00 sec)

mysql> select * from m1 order by score desc limit 3;

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

| id   | name | age  | sex  | score | address |

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

|    6 | L6   |   19 | 女   |    99 | 广州    |

|    3 | L3   |   24 | 女   |    95 | 广州    |

|    2 | L2   |   19 | 男   |    91 | 上海    |

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

3 rows in set (0.00 sec)

socre字段降序从第二名开始显示四条

mysql> select * from m1 order by score desc limit 1,4;

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

| id   | name | age  | sex  | score | address |

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

|    3 | L3   |   24 | 女   |    95 | 广州    |

|    2 | L2   |   19 | 男   |    91 | 上海    |

|    1 | L1   |   21 | 男   |    90 | 北京    |

|    4 | L4   |   22 | 男   |    89 | 广州    |

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

4 rows in set (0.00 sec)

查询age不为空,成绩前三的人

mysql> select * from m1;

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

| id   | name | age  | sex  | score | address |

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

|    2 | L2   | NULL | 男   |    91 | 上海    |

|    3 | L3   |   24 | 女   |    95 | 广州    |

|    4 | L4   |   22 | 男   |   101 | 广州    |

|    5 | L5   | NULL | 女   |    86 | 上海    |

|    6 | L6   |   19 | 女   |    99 | 北京    |

|    1 | L1   |   21 | 男   |    90 | 北京    |

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

6 rows in set (0.00 sec)

mysql> select * from m1

-> where age is not null

-> order by score desc

-> limit 3;

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

| id   | name | age  | sex  | score | address |

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

|    4 | L4   |   22 | 男   |   101 | 广州    |

|    6 | L6   |   19 | 女   |    99 | 北京    |

|    3 | L3   |   24 | 女   |    95 | 广州    |

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

3 rows in set (0.00 sec)

原文地址:http://blog.51cto.com/calabash/2139565

时间: 2024-08-29 22:45:44

mysql 查询子句的相关文章

MySQL查询子句(group by,limit,union,order by等)

Order by 按照字段值进行排序,默认升序(asc).校对规则决定排序关系. order by 字段 升序|降序(asc|desc), Order by允许多字段排序. 指的是,先按第一个字段排序,如果不能区分,才使用第二个字段,以此类推. create table test( id int primary key not null auto_increment, name varchar(10), group_id int ); insert into test values(null,'

MySQL 查询语句使用进阶

MySQL 查询语句使用进阶 =============================================================================== 概述: =============================================================================== 练习: 练习1  首先导入hellodb.sql的脚本文件,查询其数据库和表如下: [[email protected] ~]# mysql 

MySQL查询计划输出列的含义

"一:MySQL查询计划输出列的含义:1.id:每个被独立执行的操作的标识,表示对象被操作的顺序:id值越大,先被执行:如果相同,执行顺序从上到下.2.select_type:查询中每个select子句的类型.3.table:名字,被操作的对象的名称,通常是表名,但有其他格式.4.partitions:匹配的分区信息(对于非分区表值为NULL).5.type:连接操作的类型.6.possible_keys:备选的索引(列出可能被使用到的索引).7.key:经优化器选定的索引:常使用ANALYZE

MYSQL查询性能优化

查询的基础知识 MySQL查询过程如下图所示: MySQL是通过查询语句的哈希查找来命中缓存的,需要注意的是如果查询语句大小写不一致或者有多余的空格,是不会命中缓存的. 一个查询通常有很多执行方式,查询优化器通过计算开销(随机读取次数)来选择最优的查询. MySQL把所以的查询都当做联接来处理,联接是按照循环嵌套的策略来执行的,如下图所示: 查询的优化和限制 我们需要知道查询优化器会做哪些优化,这样在写查询的时候就可以不需要考虑手动来做这些优化,把这些事情交给查询优化器去做是更好的选择,查询优化

MySQL查询大小写是否敏感问题分析

mysql数据库在做查询时候,有时候是英文字母大小写敏感的,有时候又不是的,主要是由mysql的字符校验规则的设置决定的,通常默认是不支持的大小写字母敏感的.  1. 什么是字符集和校验规则? 字符集是一套符号和编码.校对规则是在字符集内用于比较字符的一套规则.任何一个给定的字符集至少有一个校对规则,它可能有几个校对规则.要想列出一个字符集的校对规则,使用SHOW COLLATION语句. 校对规则一般有这些特征: 两个不同的字符集不能有相同的校对规则. 每个字符集有一个默认校对规则.例如,ut

mysql查询语句

mysql查询语句常用SELECT命令打印当前的日期和时间select now();打印当前的日期select curdate();打印当前时间select curtime();查看当前版本select version();打印当前用户select user();查看当前数据库实例select database();查看系统中可用的变量show variables;查看系统中全局变量show global variables;一般查询系统可用变量或是全局变量都是通过like的方式来进行查询的,因

MySQL查询数据表中数据记录(包括多表查询)

MySQL查询数据表中数据记录(包括多表查询) MySQL查询数据表中数据记录(包括多表查询) 转自:http://www.baike369.com/content/?id=5355 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: select selection_list // 要查询的内容,选择哪些列 from table_list // 从什么表中查询,从何处选择行 where primary_

170727、MySQL查询性能优化

MySQL查询性能优化 MySQL查询性能的优化涉及多个方面,其中包括库表结构.建立合理的索引.设计合理的查询.库表结构包括如何设计表之间的关联.表字段的数据类型等.这需要依据具体的场景进行设计.如下我们从数据库的索引和查询语句的设计两个角度介绍如何提高MySQL查询性能. 数据库索引 索引是存储引擎中用于快速找到记录的一种数据结构.索引有多种分类方式,按照存储方式可以分为:聚簇索引和非聚簇索引:按照数据的唯一性可以分为:唯一索引和非唯一索引:按照列个数可以分为:单列索引和多列索引等.索引也有多

MySQL where 子句

我们知道从MySQL表中使用SQL SELECT 语句来读取数据. 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中. 语法 以下是SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法: SELECT field1, field2,...fieldN FROM table_name1, table_name2... [WHERE condition1 [AND [OR]] condition2..... 查询语句中你可以使用一个或者多个表,表