mysql高级查询操作

一直对于sql语句的印象不高,只依稀用过点子查询语句,想起来还不一定记得是什么查询语句,这次归纳总结一下mysql的高级查询语句。最后附上建表语句

(一).联合查询

概念:通过关键字将多条查询SQL语句连接起来。主要用于数据太多,分表后的查询。
基本语法:
select 语句
union[union选项]
select 语句;

union选项:与select选项基本一样
distinct:去重,去掉完全重复的数据(默认)
all:保存所有的数据。
例子:

select * from T_student
union all
select * from T_student;

在这里插入图片描述

(二).子查询

概念:就是将一条子语句查询到值的集合作为父语句的查询条件
例子:

查询上语文课的同学信息
select * FROM T_student  where classId =(select id from T_class where classname='语文’);

在这里插入图片描述
还可以有in 以及多个colum相等的情况,这里没写出来。

(三)连接查询

1.内连接(inner join)

概念:内连接就是左右两个表连接时候两边都相同的时候会显示查询结果否则不显示(关键字 [inner] join)
例子:

查询一个学生信息以及其对应的课程信息的集合
select * FROM T_student join T_class on T_student.classId=T_class.id

在这里插入图片描述

2.左外连接(left [outer] join)

概念:左连接就是以左表为主表连接右表如果右表不存在则显示为NULL
例子:

查询一个学生信息以及其对应的课程信息的集合
select * FROM T_student left join T_class on T_student.classId=T_class.id

在这里插入图片描述

3.右外连接(right [outer] join)

概念:右连接就是以右表为主表连接左表如果左表不存在则显示为NULL
例子:

查询一个学生信息以及其对应的课程信息的集合
select * FROM T_student right join T_class on T_student.classId=T_class.id

在这里插入图片描述

4.自然连接

概述:指自动将表中相同名称的列进行记录匹配。
自然连接:nature join,自然连接其实就是自动匹配连接条件,系统以两表中同名字段作为匹配条件,如果两表有多个同名字段,那就都作为匹配条件。在这里,自然连接可以分为自然内连接和自然外连接。
自然外连接:
基本语法:左表 + nature + left/right + join + 右表;
自然内连接:
基本语法:左表 + nature + join + 右表;
自然连接自动使用同名字段作为连接条件,而且在连接完成之后合并同名字段。
实际上,自然连接并不常用。而且,咱们可以用内连接和外连接来模拟自然连接,模拟的关键就在于使用同名字段作为连接条件及合并同名字段。

到此基本总结完了常用高级语句下面奉上建表语句

/*
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 50643
 Source Host           : 127.0.0.1:3306
 Source Schema         : javaWebLearning

 Target Server Type    : MySQL
 Target Server Version : 50643
 File Encoding         : 65001

 Date: 26/11/2019 15:16:12
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for T_class
-- ----------------------------
DROP TABLE IF EXISTS `T_class`;
CREATE TABLE `T_class` (
  `id` int(11) NOT NULL,
  `teacherId` int(11) DEFAULT NULL,
  `classname` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of T_class
-- ----------------------------
BEGIN;
INSERT INTO `T_class` VALUES (1, 101, '数学');
INSERT INTO `T_class` VALUES (2, 101, '语文');
INSERT INTO `T_class` VALUES (3, 102, '英语');
INSERT INTO `T_class` VALUES (4, 102, '体育');
INSERT INTO `T_class` VALUES (88, 101, '数字图像处理');
COMMIT;

-- ----------------------------
-- Table structure for T_student
-- ----------------------------
DROP TABLE IF EXISTS `T_student`;
CREATE TABLE `T_student` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `teacherId` int(11) DEFAULT NULL,
  `classId` int(11) DEFAULT NULL,
  `sex` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of T_student
-- ----------------------------
BEGIN;
INSERT INTO `T_student` VALUES (1001, '小李', '123456', 101, 1, '男');
INSERT INTO `T_student` VALUES (1002, '小李子', '123456', 102, 2, '男');
INSERT INTO `T_student` VALUES (1003, '小张', '123456', 101, 3, '女');
INSERT INTO `T_student` VALUES (1004, '李小子', '123456', 102, 4, '男');
INSERT INTO `T_student` VALUES (1005, '张傻子', '123456', 102, 99, '女');
COMMIT;

-- ----------------------------
-- Table structure for T_teacher
-- ----------------------------
DROP TABLE IF EXISTS `T_teacher`;
CREATE TABLE `T_teacher` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `sex` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of T_teacher
-- ----------------------------
BEGIN;
INSERT INTO `T_teacher` VALUES (101, '李老师', '123456', '男');
INSERT INTO `T_teacher` VALUES (102, '张老师', '123456', '女');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章