• 内连接查询

    •   意义:找到表和表之间的关系或者是桥梁。连接查询是查询两个或者两个以上的表时使用的。
    •   JOIN|CROSS JOIN| INNER JOIN    通过ON  连接条件(这三个方式都行)一般用JOIN进行连接,ON后面接连接条件
      1. --查询cms_user idusername 省份表中和用户表中都有id
      2. --查询省份表中的 provinces proName
      3. SELECT cms_user.id,username,proName FROM cms_user,provinces;--这个查询是不对的,因为两个表中都有id,查询结果不是真正想要的结果,而是形成了笛卡尔积的形式
      4.  
      5. --cms_userproId对应于省份表中的id
      6. SELECT cms_user.id,username,proName FROM cms_user,provinces
      7.  
      8. WHERE cms_user.proId=provinces.id;
      9.  
      10. --内连接(这个和上面的where的效果一样(先把每个表要查询东西写上,之后再写上条件)
      11. --查询cms_user表中的idusernameemailsex
      12. --查询provinces表中的proname
      13. SELECT u.id,u.username,u.email,u.sex,p.proName
      14.  
      15. FROM cms_user AS u --连接第一张表
      16.  
      17. INNER JOIN provinces AS p --连接的第二张表
      18.  
      19. ON u.proId=p.id; --通过ON来指定连接条件,这里的条件是当user的表中的proid等会省份表中的id
      20.  
      21. --第一个表要查询的:查询cms_user id,username,sex
      22. --第二个表要查询的:查询provinces prpName
      23. --ON后面的连接条件是:user表的proid等于省份表的id
      24. --条件:cms_user的性别为男的用户
      25. SELECT u.id,u.username,u.sex,p.proName
      26. FROM cms_user AS u
      27. JOIN provinces AS p
      28. ON u.proId=p.id
      29. WHERE u.sex='男';
      30.  
      31. --对分组结果进行筛选,根据proname分组,选出组中人数大于等于1的,并且按照用户表中的id进行升序排序,限制显示条数(前两条)
      32. SELECT u.id,u.username,u.sex,p.proName,COUNT(*) AS Totalsum,GROUP_CONCAT(sex)
      33. FROM cms_user AS u
      34. JOIN provinces AS p--连接
      35. ON u.proId=p.id
      36. WHERE u.sex='男'
      37. GROUP BY p.proName
      38. HAVING COUNT(*)>=1
      39. ORDER BY u.id ASC
      40. LIMIT 0,2;
      41. ;
      42.  
      43. --查询cms_news中的idtitle
      44. --查询cms_cate中的cateName
      45. --连接条件:n.cId=c.id
      46. SELECT n.id,n.title,c.cateName --先写要查询的,
      47. FROM cms_news AS n --再写要连接的几个表
      48. JOIN cms_cate AS c
      49. ON n.cId=c.id;--写连接条件
      50.  
      51. --cms_news id,title
      52. --cms_cate cateName
      53. --cams_admin username ,role
      54. --连接条件:cms——newscms——cate的条件:n.cId=c.id cms_newscams_admin连接条件:
      55. SELECT n.id,n.title,c.cateName,a.username,a.role
      56. FROM cms_news AS n--三表连接cms_news cms_cate,,,cms_admin分别建立连接
      57. JOIN cms_cate AS c
      58. ON n.cId=c.id
      59. JOIN cms_admin AS a
      60. ON n.aId=a.id;
  • 外连接查询
    •   如果插入的错误数据(垃圾数据),内连接不能查询到这个垃圾数据。
    •   左外连接:LEFT JOIN 先去显示左表的全部记录然后再去右表查询出符合连接条件的记录
    •   右外连接: RIGHT JOIN 显示右表的全部记录及左表符合连接条件的记录
      1. --左外连接
      2. SELECT u.id,u.username,u.email,u.sex,p.proName
      3.  
      4. FROM cms_user AS u
      5.  
      6. LEFT JOIN provinces AS p
      7.  
      8. ON u.proId=p.id;
  • 外键操作
      1. --创建部门表department(主表)
      2. --id depName
      3.  
      4. CREATE TABLE IF NOT EXISTS deparment(
      5. id TINYINT UNSIGNED KEY AUTO_INCREMENT,
      6. depName VARCHAR(20) NOT NULL UNIQUE
      7. )ENGINE=INNODB;
      8.  
      9. INSERT deparment(depName) VALUES('教学部'),
      10. ('市场部'),
      11. ('运营部'),
      12. ('督导部');
      13.  
      14. --创建员工表 子表 employee
      15.  
      16. CREATE TABLE IF NOT EXISTS employee(
      17. id TINYINT UNSIGNED KEY AUTO_INCREMENT,
      18. username VARCHAR(20) NOT NULL UNIQUE,
      19. depId TINYINT UNSIGNED
      20. )ENGINE=INNODB;
      21.  
      22. INSERT employee(username,depId) VALUES('KING',1),
      23. ('QUEUE',2),
      24. ('ZHANGSAN',4),
      25. ('LISI',4),
      26. ('WANGWU',5);
      27.  
      28. --查询员工的编号,用户名,部门名称 两个表
      29. --连接条件 e.depId=d.id;--内连接查询
      30. SELECT e.id,e.username,d.depName FROM
      31. deparment AS d
      32. JOIN employee AS e
      33. ON e.depId=d.id;
      34.  
      35. --删除督导部(部门解散了,理论上里面的员工也得解散,但是查询员工表的时候,发现还是有员工在督导部下面)
      36. --这就是如果你对父表做操作的时候,发现子表中有数据和父表相关联,就必须做一些操作,这里外键可以使用
      37. SELECT FROM deparment WHERE proName='督导部';
      38.  
      39. --创建外键--建表的时候创建
      40. --先创建父表,再创建子表,在子表中建立外键
      41. CREATE TABLE IF NOT EXISTS deparment(
      42. id TINYINT UNSIGNED KEY AUTO_INCREMENT,
      43. depName VARCHAR(20) NOT NULL UNIQUE
      44. )ENGINE=INNODB;
      45.  
      46. CREATE TABLE IF NOT EXISTS employee(
      47. id TINYINT UNSIGNED KEY AUTO_INCREMENT,
      48. username VARCHAR(20) NOT NULL UNIQUE,
      49. depId TINYINT UNSIGNED,
      50. FOREIGN KEY(depId) REFERENCES deparment(id)--外键
      51. )ENGINE=INNODB;
      52.  
      53. -----------------当删除父表中的记录,子表中对应的列也会被相应的删除(有关系的列)-------------
      54. --外键 +ON DELETE CASCADE 级联操作
      55. CREATE TABLE IF NOT EXISTS deparment(
      56. id TINYINT UNSIGNED KEY AUTO_INCREMENT,
      57. depName VARCHAR(20) NOT NULL UNIQUE
      58. )ENGINE=INNODB;
      59.  
      60. CREATE TABLE IF NOT EXISTS employee(
      61. id TINYINT UNSIGNED KEY AUTO_INCREMENT,
      62. username VARCHAR(20) NOT NULL UNIQUE,
      63. depId TINYINT UNSIGNED,
      64. FOREIGN KEY(depId) REFERENCES deparment(id) ON DELETE CASCADE--
      65. )ENGINE=INNODB;
      66.  
      67. -----------------当更新父表中的记录,子表中对应的列也会被相应的更新(有关系的列)-------------
      68. -----外键 +ON DELETE CASCADE ON UPDATE CASCADE 删除和更新操作都是级联的操作
      69. CREATE TABLE IF NOT EXISTS deparment(
      70. id TINYINT UNSIGNED KEY AUTO_INCREMENT,
      71. depName VARCHAR(20) NOT NULL UNIQUE
      72. )ENGINE=INNODB;
      73.  
      74. CREATE TABLE IF NOT EXISTS employee(
      75. id TINYINT UNSIGNED KEY AUTO_INCREMENT,
      76. username VARCHAR(20) NOT NULL UNIQUE,
      77. depId TINYINT UNSIGNED,
      78. FOREIGN KEY(depId) REFERENCES deparment(id) ON DELETE CASCADE ON UPDATE CASCADE--
      79. )ENGINE=INNODB;
  • 联合查询
    •   查询多个表的查询,并且将这些东西合并到一起
      1. --UNION UNION ALL
      2. --上面两个的区别是:UNION是查询结果去掉相同的记录,UNION ALL 只是简单的合并,不去掉任何内容
      3. --这个中 必须保证两个表中查询的字段的个数相同
      4. SELECT username FROM cms_user UNION SELECT username FROM employee;--去掉相同哦
  • 子查询
    •   将一个查询语句嵌套在另一个查询语句中。内层查询语句的结果可以作为外层查询语句的结果
      1. --由NOT IN IN引起的子查询
      2. --查询 id号为1,2,3,4的员工的姓名和id
      3. SELECT id FROM dparment;
      4. SELECT id,username FROM employee WHERE depId IN(1,2,3,4);
      5. SELECT id,username FROM employee WHERE depId IN(SELECT id FROM deparment);--IN中是第一次哦查询结果,外面是第二次的查询结果
      6.  
      7. --由比较运算符产生的子查询
      8. --创建学员表奖学金表
      9. CREATE TABLE IF NOT EXISTS student(
      10. id TINYINT UNSIGNED KEY AUTO_INCREMENT,
      11. username VARCHAR (20) NOT NULL UNIQUE,
      12. score TINYINT UNSIGNED
      13. );
      14.  
      15. INSERT student(username,score) VALUES('KING1',95),
      16. ('KING2',15),
      17. ('KING3',25),
      18. ('KING4',35),
      19. ('KING5',45),
      20. ('KING6',55),
      21. ('KING7',65),
      22. ('KING8',75);
      23.  
      24. CREATE TABLE IF NOT EXISTS scholarship(
      25. id TINYINT UNSIGNED KEY AUTO_INCREMENT,
      26. level TINYINT UNSIGNED NOT NULL
      27. );
      28.  
      29. INSERT scholarship(level) VALUES(90),
      30. (80),
      31. (70),
      32. (60),
      33. (50);
      34.  
      35. --运算符的子查询
      36. --查询一等奖学金个的学院有
      37. SELECT level FROM scholarship WHERE id=1;
      38. SELECT id,username FROM student WHERE score>=90;
      39. SELECT id,username FROM student WHERE score>=(SELECT level FROM scholarship WHERE id=1);
      40.  
      41. --EXISTS的子查询(存在 条件为真才能执行)
      42. --查询部门表中第五个部门表中的 素有人
      43. SELECT * FROM deparment WHERE id=5;--这个语句是假的,没有部门五
      44. SELECT id,username FROM employee WHERE EXISTS(SELECT * FROM deparment WHERE id=5);--外层的语句不会被执行,为真时才能被执行
      45. SELECT id,username FROM employee WHERE EXISTS(SELECT * FROM deparment WHERE id=4);
      46.  
      47. --SOME|ANY|ALL的子查询
      48. --得到所有获得奖学金的学生:大于等于最小值即可
      49. SELECT id ,username ,score FROM student WHERE score>=ANY(SELECT level FROM scholarship );--找到等级最小的
      50.  
      51. --查询所有学员中获得一等奖学金的学员
      52. SELECT id ,username ,score FROM student WHERE score>=ALL(SELECT level FROM scholarship );--找打等级最大的
      53.  
      54. --查询所有学员中没有获得的学员
      55. SELECT id ,username ,score FROM student WHERE score<=ALL(SELECT level FROM scholarship );--小于最小的
      56.  
      57. --子查询:将查询的结果插入到新建的表中
      58. CREATE TABLE IF NOT EXISTS test1(
      59. id TINYINT UNSIGNED KEY AUTO_INCREMENT,
      60. num TINYINT UNSIGNED
      61. );
      62. INSERT test1(id,num)
      63. SELECT id,score FROM student;--先是查询结果 ,然后将结果插入到test1的表中
      64.  
      65. --创建表时同时将查询结果写入到数据表中,与上面类似
      66. CREATE TABLE IF NOT EXISTS test12(
      67. id TINYINT UNSIGNED KEY AUTO_INCREMENT,
      68. score TINYINT UNSIGNED
      69. )SELECT id,score FROM student;
  • 正则表达式查询
      1. -- .代表任意一个字符
      2. --查询用户名已以T开始的用户 ^ 匹配字符开始的部分
      3. SELECT * FROM cms_user WHERE username REGEXP 't^';--REGEXP+正则表达式
      4. --用户名以g结尾的用户 $匹配字符串结尾的部分
      5. SELECT * FROM cms_user WHERE username REGEXP 't$';
      6. --查询,包含e或者o或者i或者t的用户名的用户,选择任何一个 []匹配字符集合中的任意一个字符
      7. SELECT * FROM cms_user WHERE username REGEXP '[LTOIS]';
      8. --查询除了e或者o或者i或者t中的其他的任何一个字符 []匹配字符集合中的任意一个字符
      9. SELECT * FROM cms_user WHERE username REGEXP '[^LTOIS]';
  • 运算符

Mysql--连接查询的更多相关文章

  1. mysql连接查询经典小例题

    mysql连接查询: Mysql连接查询支持多表连接 对同一张表可以重复连接多次(别名在多次连接同一张表时很重要) 例题1: 下面有2张表 teams表 比赛结果表:result 问题: 得出一张表: ...

  2. MySQL连接查询、联合查询、子查询

    参考地址:http://blog.csdn.net/u011277123/article/details/54863371 1.MySQL连接查询 连接查询:将多张表(>=2)进行记录的连接(按 ...

  3. 掌握MySQL连接查询到底什么是驱动表

    准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...

  4. MySQL连接查询驱动表被驱动表以及性能优化

    准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...

  5. 细说MySQL连接查询:内连、左连和右连

    转: 细说MySQL连接查询:内连.左连和右连 简介: MySQL 的连接查询,通常都是将来自两个或多个表的行结合起来,基于这些表之间的共同字段,进行数据的拼接.首先,要确定一个主表作为结果集,然后将 ...

  6. mysql连接查询,封装mysql函数

    连接查询 交叉连接语法: select  * | 字段列表 from 表1  cross join 表2 内连接: select *|字段列表 from 左表 inner join 右表 on 左表. ...

  7. Mysql 连接查询 Mysql支持的连接查询有哪些

    CREATE TABLE `chx` (   `id` VARCHAR(20) NOT NULL,   `name` VARCHAR(50) DEFAULT NULL,   `name2` CHAR( ...

  8. Mysql连接查询、子查询、联合查询 整理

    连接查询 连接语法的基本形式 from 表1  [连接方式]  join 表2  [on 连接条件]: 交叉连接 语法: from  表1  [cross]  join  表2  ;      //可 ...

  9. mysql 连接查询 join

    本文用到的表 CREATE TABLE `cls` ( `cls_id` ) NOT NULL AUTO_INCREMENT, `name` ) NOT NULL, PRIMARY KEY (`cls ...

  10. MySQL连接查询(inner join,left join和right join的区别)

    关系数据库由多个相关表组成,这些表使用已知为外键列的常用列链接在一起. 因此,从业务角度来看,每个表中的数据是不完整的. 例如,在示例数据库(yiibaidb)中,使用orderNumber列链接的o ...

随机推荐

  1. sklearn实践_普通线性回归

    import pandas as pd import numpy as np import matplotlib.pyplot as plt data = pd.read_csv(r"C:\ ...

  2. LeetCode Longest Continuous Increasing Subsequence

    原题链接在这里:https://leetcode.com/problems/longest-continuous-increasing-subsequence/description/ 题目: Giv ...

  3. linkedLoop

    public class linkQueue <E>{ private class Node<E>{ E e; Node<E> next; public Node( ...

  4. Xaml中string(字符串)常量的定义以及空格的处理

    (1)基本用法 xaml中可以实例化各种对象,比如在ResourceDictionary中定义字符串常量: <ResourceDictionary xmlns="http://sche ...

  5. iOS播放视频

    1.首先导入 MediaPlayer import MediaPlayer 2.播放事件 class ViewController:UIViewController{ var pc:MPMoviePl ...

  6. mongodb collection method

    https://docs.mongodb.com/manual/reference/method/db.collection.bulkWrite/ db.coll_test.getIndexes()# ...

  7. JavaScript 中对小数取整的常用函数

    常见的js截取小数的方法 1.丢弃小数部分,保留整数部分 js:parseInt(7/2) 2.向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 3,四舍五入. js: Math. ...

  8. 【Template】template中如果包含post方法的form, 要在<form>之后添加{% csrf_token %}标签

    template模板标签{% csrf_token %} 和CSRF middleware提供了易于使用的防“跨站点伪造攻击”的保护, 详情请阅读官方文档https://docs.djangoproj ...

  9. 2016.2.13 (年初六) oracle两张表update方法

    A表customers和B表tmp_cust_city有3个相同字段, customer_id,city_name,customer_type 现要根据b表更新a表 更新一个字段情况: update ...

  10. MySessionFactory

    package com.ORM; import org.hibernate.HibernateException; import org.hibernate.Session; import org.h ...