Select语句高级应用

1.1 SELECT高级应用

1.2 select中where子句使用

1.3 select中ORDER BY子句

1.4 LIMIT子句

1.5 多表连接查询

1.6 Informatica_schema获取元数据

1.7 参考文献

1.1 SELECT高级应用 1.1.1 前期准备工作

本次测试使用的是world数据库,由MySQL官方提供下载地址:

    https://dev.mysql.com/doc/index-other.html

world文件导入方法,官方说明:

    https://dev.mysql.com/doc/world-setup/en/world-setup-installation.html

下载sqlyog 软件,用于之后的数据库管理用:

    

创建用户,能够让sqlyog登录数据库即可,注意权限控制。

mysql> grant all on *.* to root@'%' identified by '123'; Query OK, 0 rows affected (0.00 sec)

授权用户后参看

mysql> select user,host from mysql.user where user like 'root'; +------+-----------+ | user | host | +------+-----------+ | root | % | | root | 10.0.0.1 | | root | 127.0.0.1 | | root | localhost | +------+-----------+ 4 rows in set (0.00 sec)

 

1.1.2 select语法格式说明

 

mysql> help select; Name: 'SELECT' Description: Syntax: SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ...] [FROM table_references [PARTITION partition_list] [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [INTO OUTFILE 'file_name' [CHARACTER SET charset_name] export_options | INTO DUMPFILE 'file_name' | INTO var_name [, var_name]] [FOR UPDATE | LOCK IN SHARE MODE]]

1.2 select中where子句使用

SELECT *|{[DISTINCT] column|select_expr [alias], ...]} [FROM [database.]table] [WHERE conditions];

 where 条件的说明:

  WHERE条件又叫做过滤条件,它从FROM子句的中间结果中去掉所有条件conditions不为TRUE(而为FALSE或者NULL)的行。

  WHERE子句跟在FROM子句后面,不能在WHERE子句中使用列别名。

【示例一】where字句的基本使用

SELECT * FROM world.`city` WHERE CountryCode='CHN'; or SELECT * FROM world.`city` WHERE CountryCode='chn';

sql说明:从数据库中查找是中国的城市。

注意:

  WHERE中出现的字符串和日期字面量必须使用引号括起来

  这里,字符串字面量写成大写或小写结果都一样,即不区分大小写进行查询。

  这和Oracle不同,ORACLE中WHERE条件中的字面量是区分大小写的

【示例二】where字句中的逻辑操作符

SELECT * FROM world.`city` WHERE CountryCode='chn' AND district = 'shanxi';

sql说明: 从数据库中查找是中国的并且是山西的城市

逻辑操作符介绍:

逻辑操作符

 

说明

 

and

 

逻辑与。只有当所有的子条件都为true时,and才返回true。否则返回false或null

 

or

 

逻辑或。只要有一个子条件为true,or就返回true。否则返回false或null

 

not

 

逻辑非。如果子条件为true,则返回false;如果子条件为false,则返回true

 

xor

 

逻辑异或。当一个子条件为true而另一个子条件为false时,其结果为true;

当两个条件都为true或都为false时,结果为false。否则,结果为null

 

【示例三】:where字句中的范围比较

SELECT * FROM world.`city` WHERE population BETWEEN 100000 AND 200000 ;

sql说明: 从数据库中查找人口数量在 100000-200000 之间的城市

【示例四】:where字句中的IN

SELECT * FROM city WHERE countrycode IN ('CHN','JPN');

sql说明: 查询中国和日本的所有城市

【示例五】:where字句中的like

USE world; SELECT * FROM city WHERE countrycode LIKE 'ch%';

sql说明: 从city表中找到国家是一ch开头的。

like的语法:

  like ‘匹配模式字符串’

  实现模式匹配查询或者模糊查询:测试一个列值是否匹配给出的模式

    在‘匹配模式字符串’中,可以有两个具有特殊含义的通配字符:

%:表示0个或者任意多个字符 _:只表示一个任意字符

1.3 select中ORDER BY子句 1.3.1 order by 子句的作用

  ORDER BY子句用来排序行

  如果SELECT语句中没有ORDER BY子句,那么结果集中行的顺序是不可预料的

语法:

SELECT expr FROM table [WHERE condition(s)] [ORDER BY {column, expr, numeric_position} [Asc|DEsc]];

部分参数说明: 

参数

 

参数说明

 

Asc

 

执行升序排序。默认值

 

DEsc

 

执行降序排序

 

使用方法

 

ORDER BY子句一般在SELECT语句的最后面

 

1.3.2 order by 示例

【示例一】Order by基本使用

SELECT * FROM city ORDER BY population;

sql说明:将城市表按照人口数量升序排列

【示例二】多个排序条件

SELECT * FROM city ORDER BY population,countrycode;

sql说明: 按照人口和国家进行排序

【示例三】以select字句列编号排序

SELECT * FROM city ORDER BY 5;

sql说明:按照第5列进行排序

【示例四】desc实践

SELECT * FROM city ORDER BY 5 DESC;

sql说明: 按照第列进行逆序排列

  说明:NULL值的排序

    在MySQL中,把NULL值当做一列值中的最小值对待。

    因此,升序排序时,它出现在最前面。

1.4 LIMIT子句

特点说明:

MySQL特有的子句。

它是SELECT语句中的最后一个子句(在order by后面)。

它用来表示从结果集中选取最前面或最后面的几行。

偏移量offset的最小值为0。

语法:

limit <获取的行数> [OFFSET <跳过的行数>] 或者 limit [<跳过的行数>,] <获取的行数>

查询示例

SELECT * FROM city ORDER BY 5 DEsc LIMIT 4;

sql说明: 获取排序后的前4行

    注:先按照人口数量进行降序排序,然后使用limit从中挑出最前面的4行。

      如果没有order by子句,返回的4行就是不可预料的。

1.5 多表连接查询 1.5.1 传统的连接写法(使用where)

SELECT NAME,ci.countrycode ,cl.language ,ci.population FROM city ci , countrylanguage cl WHERE ci.`CountryCode`=cl.countrycode;

sql说明: city定别名为ci ,国家定别名问为cl,进行连表查询,NAME是共同的键值,使用where条件进行连接。

  注意:一旦给表定义了别名,那么原始的表名就不能在出现在该语句的其它子句中了

1.5.2 NATURAL  JOIN子句

  自动到两张表中查找所有同名同类型的列拿来做连接列,进行相等连接

SELECT NAME,countrycode ,LANGUAGE ,population FROM city NATURAL JOIN countrylanguage WHERE population > 1000000 ORDER BY population;

sql说明:使用natural join 进行相等连接,两个表,条件为人口大于1000000的,进行升序排列。

  注意:在select子句只能出现一个连接列

1.5.3 使用using子句

SELECT NAME,countrycode ,LANGUAGE ,population FROM city JOIN countrylanguage USING(countrycode);

sql说明:使用join进行两表的来连接,using指定countrycode为关联列。

1.5.4 集合操作

UNION [DISTINCT] UNION ALL

语法:

SELECT ... UNION [ALL | DISTINCT] SELECT ... [UNION [ALL | DISTINCT] SELECT ...]

     ⛳ UNION用于把两个或者多个select查询的结果集合并成一个

   ⛳ 进行合并的两个查询,其SELECT列表必须在数量和对应列的数据类型上保持一致

   ⛳ 默认会去掉两个查询结果集中的重复行

   ⛳ 默认结果集不排序

     ⛳ 最终结果集的列名来自于第一个查询的SELECT列表

1.5.5 分组操作及分组处理

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/cf384f4588e1658d66221ae095a1badf.html