一直对于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;