MySQL中常用操作--子查询

  子查询就是SELECT 查询是另一个SELECT的附属,  此时, MySQL从最内层的查询开始, 再向外向上查询, 接着最外层的父查询被执行, 它的结果也指定给父查询.

  •   带IN的子查询:
    只有子查询返回的结果列中包含一个值时, 比较运算符才适用. 假如一个子查询的返回结果集是值的列表, 这时比较运算符就必须用关键字IN代替
    IN运算符可以检测结果集中是否存在某个特定的值, 如果检测成功就执行外部的查询.

    mysql> select * from stu
        -> ;
    +----+----------+-------+
    | id | username | score |
    +----+----------+-------+
    |  1 | liub     |    95 |
    |  2 | xiaoming |   100 |
    |  3 | xiaohong |    80 |
    |  4 | 周星星   |     0 |
    |  5 | 凌凌漆   |   100 |
    |  6 | 达叔     |    90 |
    |  7 | 浩南     |    60 |
    |  8 | 山鸡     |    50 |
    |  9 | 孙猴子   |    85 |
    | 10 | 李四     |    55 |
    +----+----------+-------+
    10 rows in set (0.00 sec)
    
    mysql> SELECT * FROM scoreLevel;
    +----+-------+
    | id | score |
    +----+-------+
    |  1 |    90 |
    |  2 |    80 |
    |  3 |    70 |
    +----+-------+
    3 rows in set (0.00 sec)
    
    mysql> SELECT * FROM stu WHERE score IN (SELECT score FROM scoreLevel);
    +----+----------+-------+
    | id | username | score |
    +----+----------+-------+
    |  3 | xiaohong |    80 |
    |  6 | 达叔     |    90 |
    +----+----------+-------+
    2 rows in set (0.00 sec)

    NOT IN :

    mysql> SELECT * FROM stu WHERE score NOT IN (SELECT score FROM scoreLevel);
    +----+----------+-------+
    | id | username | score |
    +----+----------+-------+
    |  1 | liub     |    95 |
    |  2 | xiaoming |   100 |
    |  4 | 周星星   |     0 |
    |  5 | 凌凌漆   |   100 |
    |  7 | 浩南     |    60 |
    |  8 | 山鸡     |    50 |
    |  9 | 孙猴子   |    85 |
    | 10 | 李四     |    55 |
    +----+----------+-------+
    8 rows in set (0.00 sec)
  • 带比较运算符的子查询:
    =, !=, >, >=, <, <=......

    SELECT * FROM stu WHERE score>=(SELECT score FROM scoreLevel WHERE id=1);

    mysql> SELECT * FROM stu WHERE score>=(SELECT score FROM scoreLevel WHERE id=1);
    +----+----------+-------+
    | id | username | score |
    +----+----------+-------+
    |  1 | liub     |    95 |
    |  2 | xiaoming |   100 |
    |  5 | 凌凌漆   |   100 |
    |  6 | 达叔     |    90 |
    +----+----------+-------+
    4 rows in set (0.00 sec)
  • 带关键字EXISTS 的子查询:
    使用关键字EXISTS查询时, 内层查询语句不返回查询的记录, 而是返回一个真假值. 如果内层的查询语句查询到满足条件的语句的记录, 就返回一个真值(true), 否则返回一个假值(false).当返回的值为true时, 外层查询语句将进行查询, 当返回结果为false时, 外层查询语句不进行查询或者查询不出任何记录.

    SELECT * FROM stu WHERE EXISTS (SELECT score FROM scoreLevel WHERE id=2);

    mysql> SELECT * FROM stu WHERE EXISTS (SELECT score FROM scoreLevel WHERE id=10);
    Empty set (0.00 sec)
    
    mysql> SELECT * FROM stu WHERE EXISTS (SELECT score FROM scoreLevel WHERE id=2);
    +----+----------+-------+
    | id | username | score |
    +----+----------+-------+
    |  1 | liub     |    95 |
    |  2 | xiaoming |   100 |
    |  3 | xiaohong |    80 |
    |  4 | 周星星   |     0 |
    |  5 | 凌凌漆   |   100 |
    |  6 | 达叔     |    90 |
    |  7 | 浩南     |    60 |
    |  8 | 山鸡     |    50 |
    |  9 | 孙猴子   |    85 |
    | 10 | 李四     |    55 |
    +----+----------+-------+
    10 rows in set (0.00 sec)
  • 带ANY, SOME, ALL 的查询:

    mysql> SELECT * FROM stu WHERE score>=ANY(SELECT score FROM scoreLevel);--表示在 stu 中 >= scoreLevel 中的最小值(70)//SOME 和 ANY效果一样
    +----+----------+-------+
    | id | username | score |
    +----+----------+-------+
    |  1 | liub     |    95 |
    |  2 | xiaoming |   100 |
    |  3 | xiaohong |    80 |
    |  5 | 凌凌漆   |   100 |
    |  6 | 达叔     |    90 |
    |  9 | 孙猴子   |    85 |
    +----+----------+-------+
    6 rows in set (0.00 sec)

   

mysql> SELECT * FROM stu WHERE score>=ALL(SELECT score FROM scoreLevel);--表示在 stu 中 >= scoreLevel 中的最大值(90)
+----+----------+-------+
| id | username | score |
+----+----------+-------+
|  1 | liub     |    95 |
|  2 | xiaoming |   100 |
|  5 | 凌凌漆   |   100 |
|  6 | 达叔     |    90 |
+----+----------+-------+
4 rows in set (0.00 sec)

CREATE .......SELECT .......:

  

mysql> CREATE table excellentStudent(
    -> id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> username VARCHAR(100) NOT NULL,
    -> score TINYINT UNSIGNED NOT NULL
    -> )ENGINE=INNODB CHARSET=UTF8 SELECT * FROM stu WHERE score>=ALL(SELECT score FROM scoreLevel);
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM excellentstudent;
+----+----------+-------+
| id | username | score |
+----+----------+-------+
|  1 | liub     |    95 |
|  2 | xiaoming |   100 |
|  5 | 凌凌漆   |   100 |
|  6 | 达叔     |    90 |
+----+----------+-------+
4 rows in set (0.00 sec)

INSERT.......SELECT.........:

mysql> INSERT excellentStudent(username) SELECT username FROM user;
Query OK, 7 rows affected, 1 warning (0.01 sec)
Records: 7  Duplicates: 0  Warnings: 1

mysql> SELECT * FROM excellentstudent;
+----+----------+-------+
| id | username | score |
+----+----------+-------+
|  1 | liub     |    95 |
|  2 | xiaoming |   100 |
|  5 | 凌凌漆   |   100 |
|  6 | 达叔     |    90 |
|  7 | a        |     0 |
|  8 | b        |     0 |
|  9 | c        |     0 |
| 10 | d        |     0 |
| 11 | e        |     0 |
| 12 | f        |     0 |
| 13 | g        |     0 |
+----+----------+-------+
11 rows in set (0.00 sec)

去掉字段的重复值:

SELECT DISTINCT(字段名) FROM 表名;

创建一个与table_name2一样的表结构的table_name1(创建好的table_name1有结构, 但是内容为空.):

CREATE TABLE table_name1 LIKE table_name2;

  • 合并查询结果

    合并查询结果是将多个SELECT语句的查询结果合并到一起, 使用关键字 UNION 和 UNION ALL.其中, UNION 是将多个表中的记录去重后合并到一起, 而 UNION ALL 只是简单的合并操作.  

  UNION:
    SELECT 字段名称,... FROM tbl_name1
    UNION
    SELECT 字段名称... FROM tbl_name2;
  UNION ALL:
    SELECT 字段名称,... FROM tbl_name1
    UNION ALL
    SELECT 字段名称... FROM tbl_name2;

原文地址:https://www.cnblogs.com/iceliu/p/11624892.html

时间: 2024-12-13 14:35:26

MySQL中常用操作--子查询的相关文章

SELECT中(非常)常用的子查询操作

MySQL中的子查询 是在MySQL中经常使用到的一个操作,不仅仅是用在DQL语句中,在DDL语句.DML语句中也都会常用到子查询. 子查询的定义: 子查询是将一个查询语句嵌套在另一个查询语句中: 在特定情况下,一个查询语句的条件需要另一个查询语句来获取,内层查询(inner query)语句的查询结果,可以为外层查询(outer query)语句提供查询条件. 特点(规范): ①子查询必须放在小括号中 ②子查询一般放在比较操作符的右边,以增强代码可读性 ③子查询(小括号里的内容)可出现在几乎所

【转】centOS中mysql一些常用操作

安装mysql yum -y install mysql-server 修改mysql配置vi /etc/my.cnf 这里会有很多需要注意的配置项,后面会有专门的笔记暂时修改一下编码(添加在密码下方): default-character-set = utf8 设置mysql随系统启动# chkconfig mysqld on ← 设置MySQL服务随系统启动自启动# chkconfig --list mysqld ← 确认MySQL自启动mysqld 0:off 1:off 2:on 3:o

警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的性能陷阱

警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的性能陷阱 以下文章来源:https://blog.csdn.net/defonds/article/details/46745143 mer_stage 表有 216423 条记录,DDL:CREATE TABLE `mer_stage` ( `STAGE_ID` int(11) NOT NULL AUTO_INCREMENT, `MER_ID` int(11) NOT NULL, `MER_CODE` varch

Mysql中常用的函数汇总

Mysql中常用的函数汇总: 一.数学函数abs(x) 返回x的绝对值bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制)ceiling(x) 返回大于x的最小整数值exp(x) 返回值e(自然对数的底)的x次方floor(x) 返回小于x的最大整数值greatest(x1,x2,...,xn)返回集合中最大的值least(x1,x2,...,xn) 返回集合中最小的值ln(x) 返回x的自然对数log(x,y)返回x的以y为底的对数mod(x,y) 返回x/y的模(余数)pi(

Mysql数据库常用操作

1.备份数据库 [[email protected] ~]# mysqldump -h 192.168.0.8 -uroot  -p'123456'  user >user.sql 2.查看mysql数据库字符集设置 mysql> show variables like 'character_set_%';+--------------------------+----------------------------+| Variable_name            | Value    

Linux下mysql的常用操作

Linux下mysql的常用操作: 显示数据库 show databases; 选择数据库 use 数据库名; 显示数据库中的表 show tables; 显示数据表的结构 describe 表名; 显示表中的记录 SELECT * FROM 表名 建库 create databse 库名; 建表 create table 表名 (字段设定列表): mysql> create table name( -> id int auto_increment not null primary key ,

Spring中常用的hql查询方法(getHibernateTemplate()) 【转】

一.find(String queryString); 示例:this.getHibernateTemplate().find("from bean.User"); 返回所有User对象 二.find(String queryString , Object value); 示例:this.getHibernateTemplate().find("from bean.User u where u.name=?", "test"); 或模糊查询:th

mysql中常用的语句整理

mysql中常用的语句: 1:创建带自增长的主键的表 DROP TABLE IF EXISTS user_login ; CREATE TABLE user_login (   user_id INT  UNSIGNED NOT NULL AUTO_INCREMENT,   user_name VARCHAR(50) DEFAULT NULL,   PRIMARY KEY user_id ) ENGINE=MYISAM  AUTO_INCREMENT=0  DEFAULT CHARSET=utf

MySQL的常用操作更改root密码、连接MySQL、MySQL常用的命令

MySQL的常用操作更改root密码 连接MySQL MySQL常用的命令 原文地址:http://blog.51cto.com/13515599/2090001