一直對於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;