数据库基本操作

article/2025/11/3 2:27:58

一、数据库基本操作

1.数据库的基本操作

-- 1.数据库的基本操作
使用test数据库
USE test; 
-- 查看当前test数据库中所有表 MySQL命令
SHOW TABLES;
-- 查表的基本信息
SHOW CREATE TABLE student;  
-- -- 查看表的字段信息
desc student;

2.数据表的基本操作

-- 2.数据表的基本操作-- 创建学生数据表
CREATE TABLE student(
id int,
name VARCHAR(20),
gender VARCHAR(10),
birthday DATE
);-- 查看数据表
SHOW TABLES;-- 查表的基本信息的MySQL命令
SHOW CREATE TABLE student;-- 查看表的字段信息的MySQL命令
desc student;

3.修改数据库

-- 3.修改数据库-- 修改表名
ALTER TABLE student RENAME TO stu;-- 修改字段名
ALTER TABLE stu CHANGE name sname VARCHAR(10);-- 修改字段数据类型
ALTER TABLE stu MODIFY sname int;-- 增加字段
ALTER TABLE stu add address VARCHAR(50);-- 删除字段
ALTER TABLE stu DROP address;-- 4.删除数据表DROP TABLE stu;

二、数据表的约束

1.主键约束----->PRIMARY KEY(id)

-- 1.主键约束----->PRIMARY KEY(id)
-- 字段名 数据类型 primary key;-- 设置主键约束(primary key)的第一种方式
CREATE TABLE student(
id int PRIMARY KEY,
name VARCHAR(20)
);-- 设置主键约束(primary key)的第二·种方式CREATE TABLE student01(
id int,
name VARCHAR(20),
PRIMARY KEY(id)
);

2.非空约束----->NOT NULL

-- 2.非空约束----->NOT NULL
-- 字段名 数据类型 NOT NULL;
CREATE TABLE student02(
id int,
name VARCHAR(20) NOT NULL
);

3.默认值约束---->DEFAULT

-- 3.默认值约束---->DEFAULT
-- 字段名 数据类型 DEFAULT 默认值;\
CREATE TABLE studebt03(
id int,
name VARCHAR(20),
gerdenr VARCHAR(10) DEFAULT "male"
);

4.唯一性约束----->UNIQUE

-- 4.唯一性约束----->UNIQUE
-- 字段名 数据类型 UNIQUE;CREATE TABLE student04(
id int,
name VARCHAR(20) UNIQUE
);

5.外键约束

-- 5.外键约束
-- 在创建数据表时语法如下:
-- CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段)
-- 将创建数据表创号后语法如下:
-- ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段);-- 创建学生表
CREATE TABLE student05(
id int PRIMARY KEY,
name VARCHAR(20)
);-- 创建班级表
CREATE TABLE class(
classid int PRIMARY KEY,
studentid int
);-- 学生表作为主表,班级表作为副表设置外键
ALTER TABLE class add CONSTRAINT fk_class_studentid FOREIGN KEY(studentid) REFERENCES student05(id);

6.1 数据一致性概念

6.2 删除外键

-- alter table 从表名 drop foreign key 外键名;ALTER TABLE class DROP FOREIGN KEY fk_class_studentid;

三、数据表插入数据

-- 先准备一张学生表
CREATE TABLE student(
id int,
name VARCHAR(30),
age int,
gender VARCHAR(30)
);

1.为表中所有字段插入数据

-- INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...);INSERT INTO student (id,name,age,gender)VALUES (1,'bob',16,'male');

2.为表中指定字段插入数据

INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...);

3.同时插入多条记录

-- 3. 同时插入多条记录
-- INSERT INTO 表名 [(字段名1,字段名2,...)]VALUES (值 1,值 2,…),(值 1,值 2,…),...;insert into student (id,name,age,gender) values (2,'lucy',17,'female'),(3,'jack',19,'male'),(4,'tom',18,'male');

四、更新数据

1.UPDATE基本语法

-- 1. UPDATE基本语法
-- UPDATE 表名 SET 字段名1=值1[,字段名2 =值2,…] [WHERE 条件表达式];
UPDATE student set age=20,gender='female' WHERE name='tom';

2. UPDATE更新全部数据

-- 3. UPDATE更新全部数据
UPDATE student set age=18;

 八、删除数据----->DELETE

-- 先准备一张数据表
-- 创建学生表create table student06(id int,name varchar(30),age int,gender varchar(30));-- 插入数据insert into student06 (id,name,age,gender) values (2,'lucy',17,'female'),(3,'jack',19,'male'),(4,'tom',18,'male'),(5,'sal',19,'female'),(6,'sun',20,'male')
,(7,'sad',13,'female'),(8,'sam',14,'male');

  1. DELETE基本语法

-- 1. DELETE基本语法
-- DELETE FROM 表名 [WHERE 条件表达式];

  2. DELETE删除部分数据

-- 删除age等于14的所有记录
delete from student where age=14;

 3. DELETE删除全部数据

-- 删除student06表中的所有记录
DELETE FROM student06;

-- 4. TRUNCATE和DETELE的区别 -- TRUNCATE和DETELE都能实现删除表中的所有数据的功能,但两者也是有区别的:

-- 1、DELETE语句后可跟WHERE子句,可通过指定WHERE子句中的条件表达式只删除满足条件的部分记录;但是,TRUNCATE语句只能用于删除表中的所有记录。

-- 2、使用TRUNCATE语句删除表中的数据后,再次向表中添加记录时自动增加字段的默认初始值重新由1开始;使用DELETE语句删除表中所有记录后,再次向表中添加记录时自动增加字段的值为删除时该字段的最大值加1

-- 3、DELETE语句是DML语句,TRUNCATE语句通常被认为是DDL语句

九、MySQL数据表简单查询

-- 创建数据库
DROP DATABASE IF EXISTS mydb;
CREATE DATABASE mydb;
USE mydb;-- 创建student表
CREATE TABLE student (sid CHAR(6),sname VARCHAR(50),age INT,gender VARCHAR(50) DEFAULT 'male'
);-- 向student表插入数据
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female');

        

2. 查询

-- 2.查询所有字段(方法不唯一只是举例)
SELECT * FROM student;-- 3.查询指定字段(sid、sname)
SELECT sid,sname from student;-- 4.常数的查询
-- 在SELECT中除了书写列名,还可以书写常数。可以用于标记SELECT sid,sname,'2021-03-02' FROM student;-- 5.从查询结果中过滤重复数据
-- 在SELECT查询语句中DISTINCT关键字只能用在第一个所查列名之前。
SELECT DISTINCT gender FROM student;-- 6.算术运算符(举例加运算符)
SELECT sname,age+100 FROM student;

十、函数

-- 准备测试数据
-- 创建数据库
DROP DATABASE IF EXISTS mydb;
CREATE DATABASE mydb;
USE mydb;-- 创建student表
CREATE TABLE student (sid CHAR(6),sname VARCHAR(50),age INT,gender VARCHAR(50) DEFAULT 'male'
);-- 向student表插入数据
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male');
INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female');

1.聚合函数

-- 聚合函数使用规则:

-- 只有SELECT子句HAVING子句、ORDER BY子句中能够使用聚合函数

-- 1.1、count()
-- 查询有多少该表中有多少人-- 
SELECT count(*) FROM student;-- 1.2、max()
-- 计算指定列的最大值,如果指定列是字符串类型则使用字符串排序运算
-- 查询该学生表中年纪最大的学生 
SELECT MAX(age) FROM student;-- 1.3、min()
-- 计算指定列的最小值,如果指定列是字符串类型则使用字符串排序运算
-- 查询该学生表中年纪最小的学生
SELECT sname,MIN(age) FROM student;-- 1.4、sum()
-- 计算指定列的数值和,如果指定列类型不是数值类型则计算结果为0
-- 查询该学生表中年纪的总和
SELECT SUM(age) FROM student;-- 1.5、avg()
-- 计算指定列的平均值,如果指定列类型不是数值类型则计算结果为
-- 查询该学生表中年纪的平均数SELECT AVG(age) FROM student;

2. 其他常用函数

-- 2.1、时间函数
SELECT NOW();
SELECT DAY (NOW());
SELECT DATE (NOW());
SELECT TIME (NOW());
SELECT YEAR (NOW());
SELECT MONTH (NOW());
SELECT CURRENT_DATE();
SELECT CURRENT_TIME();
SELECT CURRENT_TIMESTAMP();
SELECT ADDTIME('14:23:12','01:02:01');
SELECT DATE_ADD(NOW(),INTERVAL 1 DAY);
SELECT DATE_ADD(NOW(),INTERVAL 1 MONTH);
SELECT DATE_SUB(NOW(),INTERVAL 1 DAY);
SELECT DATE_SUB(NOW(),INTERVAL 1 MONTH);
SELECT DATEDIFF('2019-07-22','2019-05-05');-- 2.2、字符串函数-- 连接函数
SELECT CONCAT ()
--
SELECT INSTR ();
-- 统计长度
SELECT LENGTH();-- 2.3、数学函数-- 绝对值
SELECT ABS(-136);
-- 向下取整
SELECT FLOOR(3.14);
-- 向上取整
SELECT CEILING(3.14);

十一、条件查询

        1.使用关系运算符查询

-- 查询年龄等于或大于17的学生的信息
SELECT * FROM student WHERE age>=17;

        2.使用IN关键字查询

-- IN关键字用于判断某个字段的值是否在指定集合中。如果字段的值恰好在指定的集合中,则将字段所在的记录将査询出来。

-- 查询sid为S_1002和S_1003的学生信息
SELECT * FROM student WHERE sid in ('S_1002','S_1003');
-- 查询sid为S_1001以外的学生的信息
SELECT * from student WHERE sid NOT in ('S_1001');

        3.使用BETWEEN AND关键字查询

-- BETWEEN AND用于判断某个字段的值是否在指定的范围之内如果字段的值在指定范围内,则将所在的记录将查询出来

-- 查询15到18岁的学生信息
SELECT * FROM student WHERE age BETWEEN 15 AND 18;
-- 查询不是15到18岁的学生信息
SELECT * FROM student WHERE age NOT BETWEEN 15 AND 18;

        4.使用空值查询

-- 在MySQL中,使用 IS NULL关键字判断字段的值是否为空值。请注意:空值NULL不同于0,也不同于空字符串

-- 查询sname不为空值的学生信息
SELECT * FROM student WHERE sname IS NOT NULL;

        5.使用AND关键字查询

-- 在MySQL中可使用AND关键字可以连接两个或者多个查询条件。

-- 查询年纪大于15且性别为male的学生信息
SELECT * FROM student WHERE age>15 AND gender='male';

 6.使用OR关键字查询

         在使用SELECT语句查询数据时可使用OR关键字连接多个査询条件。

        在使用OR关键字时,只要记录满足其中任意一个条件就会被查询出来

-- 查询年纪大于15或者性别为male的学生信息
SELECT * FROM student WHERE age>15 OR gender='male';

7.使用LIKE关键字查询

MySQL中可使用LIKE关键字可以判断两个字符串是否相匹配

-- 7.1 普通字符串-- 查询sname中与wang匹配的学生信息
SELECT * FROM student WHERE sname LIKE 'wang';-- 7.2 含有%通配的字符串
-- %用于匹配任意长度的字符串-- 查询学生姓名以li开始的记录
SELECT * FROM student WHERE sname LIKE 'li%';-- 查询学生姓名以g结尾的记录
SELECT * FROM student WHERE sname LIKE '%g';-- 查询学生姓名包含s的记录
SELECT * FROM student WHERE sname LIKE '%s%';-- 7.3 含有_通配的字符串
-- 下划线通配符只匹配单个字符-- 查询学生姓名以zx开头且长度为4的记录
SELECT * FROM student WHERE sname LIKE 'zx__';-- 查询学生姓名以g结尾且长度为4的记录
SELECT * FROM student WHERE sname LIKE '___g';

8.使用LIMIT限制查询结果的数量

        当执行查询数据时可能会返回很多条记录,而用户需要的数据可能只是其中的一条或者几条。

-- 查询学生表中年纪最小的3位同学
SELECT * FROM student ORDER BY age ASC LIMIT 3;

9.使用GROUP BY进行分组查询

        通过GROUP BY将原来的表拆分成了几张小表。

准备工作

-- 准备工作
-- 创建数据库
DROP DATABASE IF EXISTS mydb;
CREATE DATABASE mydb;
USE mydb;-- 创建员工表
CREATE TABLE employee (id int,name varchar(50),salary int,departmentnumber int
);-- 向员工表中插入数据
INSERT INTO employee values(1,'tome',2000,1001); 
INSERT INTO employee values(2,'lucy',9000,1002); 
INSERT INTO employee values(3,'joke',5000,1003); 
INSERT INTO employee values(4,'wang',3000,1004); 
INSERT INTO employee values(5,'chen',3000,1001); 
INSERT INTO employee values(6,'yukt',7000,1002); 
INSERT INTO employee values(7,'rett',6000,1003); 
INSERT INTO employee values(8,'mujk',4000,1004); 
INSERT INTO employee values(9,'poik',3000,1001);

9.1 GROUP BY和聚合函数一起使用

-- 统计各部门员工个数
SELECT departmentnumber,COUNT(*) FROM employee GROUP BY departmentnumber;-- 统计部门编号大于1001的各部门员工个数
SELECT departmentnumber,COUNT(*) FROM employee WHERE departmentnumber>1001 GROUP BY departmentnumber;

9.2 GROUP BY和聚合函数以及HAVING一起使用

SELECT departmentnumber,SUM(salary) FROM employee GROUP BY departmentnumber HAVING sum(salary)>8000;

10.使用ORDER BY对查询结果排序

        -- ORDER BY对查询结果进行排序

        -- SELECT 字段名1,字段名2,… -- FROM 表名

        -- ORDER BY 字段名1 [ASC 丨 DESC],字段名2 [ASC | DESC];

-- -- 在该语法中:字段名1、字段名2是查询结果排序的依据;参数 ASC表示按照升序排序,DESC表示按照降序排序;默认情况下,按照ASC方式排序。通常情况下,ORDER BY子句位于整个SELECT语句的末尾。

-- 查询所有学生并按照年纪大小升序排列 
SELECT * FROM student ORDER BY age ASC;-- 查询所有学生并按照年纪大小降序排列
SELECT * FROM student ORDER BY age DESC;

十二、别名设置

-- 在査询数据时可为表和字段取別名,该别名代替表和字段的原名参与查询操作。

1.为表取别名

-- SELECT * FROM 表名 [AS] 表的别名 WHERE .... ;

-- 将student改为stu查询整表 
SELECT * FROM student AS stu;

2.为字段取别名

-- SELECT 字段名1 [AS] 别名1 , 字段名2 [AS] 别名2 , ... FROM 表名 WHERE ... ;

将student中的sname取别名为“姓名”SELECT sname AS '姓名',sid FROM student;

十三、表的关联关系

-- 在实际开发中数据表之间存在着各种关联关系。在此,介绍MySQL中数据表的三种关联关系。

-- 多对一(亦称为一对多)是数据表中最常见的一种关系。例如:员工与部门之间的关系,一个部门可以有多个员工;而一个员工不能属于多个部门只属于某个部门。

在多对一的表关系 中,应将外键建在多的一方否则会造成数据的冗余。

-- 多对多 -- 多对多是数据表中常见的一种关系。例如:学生与老师之间的关系,一个学生可以有多个老师而且一个老师有多个学生。

通常情况下,为了实现这种关系需要定义一张中间表(亦称为连接表)该表会存在两个外键分别参照老师表和学生表。

-- 一对一 -- 在开发过程中,一对一的关联关系在数据库中并不常见;因为以这种方式存储的信息通常会放在同一张表中。

-- 接下来,我们来学习在一对多的关联关系中如果添加和删除数据。先准备一些测试数据,代码如下:

DROP TABLE IF EXISTS student;
DROP TABLE IF EXISTS class;-- 创建班级表
CREATE TABLE class(cid int(4) NOT NULL PRIMARY KEY,cname varchar(30) 
);-- 创建学生表
CREATE TABLE student(sid int(8) NOT NULL PRIMARY KEY,sname varchar(30),classid int(8) NOT NULL
);-- 为学生表添加外键约束
ALTER TABLE student ADD CONSTRAINT fk_student_classid FOREIGN KEY(classid) REFERENCES class(cid);
-- 向班级表插入数据
INSERT INTO class(cid,cname)VALUES(1,'Java');
INSERT INTO class(cid,cname)VALUES(2,'Python');-- 向学生表插入数据
INSERT INTO student(sid,sname,classid)VALUES(1,'tome',1);
INSERT INTO student(sid,sname,classid)VALUES(2,'lucy',1);
INSERT INTO student(sid,sname,classid)VALUES(3,'lili',2);
INSERT INTO student(sid,sname,classid)VALUES(4,'domi',2);SELECT * FROM class;
SELECT * FROM student;

1.关联查询

-- 查询Java班的所有学生
SELECT *FROM student WHERE classid=(SELECT cid FROM class WHERE cname='Java');

2.关于关联关系的删除数据

-- 请从班级表中删除Java班级。

请注意:班级表和学生表之间存在关联关系;要删除Java班级,应该先删除学生表中与该班相关联的学生。否则,假若先删除Java班那么学生表中的cid就失去了关联

-- 删除Java班
DELETE FROM student WHERE classid=(SELECT cid FROM class WHERE cname='Java');
DELETE FROM class WHERE cname='Java';

十四、多表连接查询

-- 准备数据

1.交叉连接查询

-- 交叉连接返回的结果是被连接的两个表中所有数据行的笛卡儿积;

比如:集合A={a,b},集合B={0,1,2},则集合A和B的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。所以,交叉连接也被称为笛卡尔连接,其语法格式如下:

-- SELECT * FROM 表1 CROSS JOIN 表2;

-- 由于这个交叉连接查询在实际运用中没有任何意义,所以只做为了解即可

2.内连接查询

-- 内连接(Inner Join)又称简单连接或自然连接,是一种非常常见的连接查询内连接使用比较运算符对两个表中的数据进行比较并列出与连接条件匹配的数据行,组合成新的记录。也就是说在内连接查询中只有满足条件的记录才能出现在查询结果中(返回的结果只包含符合查询条件和连接条件的数据)

-- SELECT 查询字段1,查询字段2, ... FROM 表1 [INNER] JOIN 表2 ON 表1.关系字段=表2.关系字段

-- 在该语法中:INNER JOIN用于连接两个表,ON来指定连接条件;其中INNER可以省略。

-- 查询员工姓名及其所属部门名称
SELECT employee.ename,department.dname FROM department INNER JOIN employee on department.did=employee.departmentid;
-- 准备数据
-- 若存在数据库mydb则删除
DROP DATABASE IF EXISTS mydb;
-- 创建数据库mydb
CREATE DATABASE mydb;
-- 选择数据库mydb
USE mydb;-- 创建部门表
CREATE TABLE department(did int (4) NOT NULL PRIMARY KEY, 
dname varchar(20)
);-- 创建员工表
CREATE TABLE employee (eid int (4) NOT NULL PRIMARY KEY, 
ename varchar (20), 
eage int (2), 
departmentid int (4) NOT NULL
);-- 向部门表插入数据
INSERT INTO department VALUES(1001,'财务部');
INSERT INTO department VALUES(1002,'技术部');
INSERT INTO department VALUES(1003,'行政部');
INSERT INTO department VALUES(1004,'生活部');
-- 向员工表插入数据
INSERT INTO employee VALUES(1,'张三',19,1003);
INSERT INTO employee VALUES(2,'李四',18,1002);
INSERT INTO employee VALUES(3,'王五',20,1001);
INSERT INTO employee VALUES(4,'赵六',20,1004);

3.外连接查询

-- 在使用内连接查询时我们发现:返回的结果只包含符合查询条件和连接条件的数据。

-- 但是,有时还需要在返回查询结果中不仅包含符合条件的数据,而且还包括左表、右表或两个表中的所有数据,此时我们就需要使用外连接查询。

-- 外连接又分为左(外)连接和右(外)连接。其语法格式如下:

-- SELECT 查询字段1,查询字段2, ... FROM 表1 LEFT | RIGHT [OUTER] JOIN 表2 ON 表1.关系字段=表2.关系字段 WHERE 条件

-- 1、LEFT [OUTER] JOIN 左(外)连接:返回包括左表中的所有记录和右表中符合连接条件的记录。

-- 2、RIGHT [OUTER] JOIN 右(外)连接:返回包括右表中的所有记录和左表中符合连接条件的记录。

-- 若存在数据库mydb则删除
DROP DATABASE IF EXISTS mydb;
-- 创建数据库mydb
CREATE DATABASE mydb;
-- 选择数据库mydb
USE mydb;-- 创建班级表
CREATE TABLE class(cid int (4) NOT NULL PRIMARY KEY, 
cname varchar(20)
);-- 创建学生表
CREATE TABLE student (sid int (4) NOT NULL PRIMARY KEY, 
sname varchar (20), 
sage int (2), 
classid int (4) NOT NULL
);
-- 向班级表插入数据
INSERT INTO class VALUES(1001,'Java');
INSERT INTO class VALUES(1002,'C++');
INSERT INTO class VALUES(1003,'Python');
INSERT INTO class VALUES(1004,'PHP');-- 向学生表插入数据
INSERT INTO student VALUES(1,'张三',20,1001);
INSERT INTO student VALUES(2,'李四',21,1002);
INSERT INTO student VALUES(3,'王五',24,1002);
INSERT INTO student VALUES(4,'赵六',23,1003);
INSERT INTO student VALUES(5,'Jack',22,1009);

-- 准备这组数据有一定的特点,为的是让大家直观的看出左连接与右连接的不同之处

-- 1、班级编号为1004的PHP班级没有学生

-- 2、学号为5的学生王跃跃班级编号为1009,该班级编号并不在班级表中

3.1 左(外)连接查询

-- 左(外)连接的结果包括LEFT JOIN子句中指定的左表的所有记录,以及所有满足连接条件的记录。如果左表的某条记录在右表中不存在则在右表中显示为空。

-- 只有形式不一样。left join 是 left outer join 的简写,两者含义一样的。

-- 查询每个班的班级ID、班级名称及该班的所有学生的名字 MSELECT class.cid,class.cname,student.sname FROM class LEFT OUTER JOIN student on class.cid=student.classid;

运行结果:

 

3.2 右(外)连接查询

-- 右(外)连接的结果包括RIGHT JOIN子句中指定的右表的所有记录,以及所有满足连接条件的记录。如果右表的某条记录在左表中没有匹配,则左表将返回空值。

-- 只有形式不一样。right join 是 right outer join 的简写,两者含义一样的。

-- 查询每个班的班级ID、班级名称及该班的所有学生的名字SELECT class.cid,class.cname,student.sname FROM class RIGHT OUTER JOIN student ON class.cid=student.classid;

运行结果:

 

十五、子查询

-- 子查询是指一个查询语句嵌套在另一个查询语句内部的查询;

DROP TABLE IF EXISTS student;
DROP TABLE IF EXISTS class;-- 创建班级表
CREATE TABLE class(cid int (4) NOT NULL PRIMARY KEY, 
cname varchar(20)
);-- 创建学生表
CREATE TABLE student (sid int (4) NOT NULL PRIMARY KEY, 
sname varchar (20), 
sage int (2), 
classid int (4) NOT NULL
);-- 向班级表插入数据
INSERT INTO class VALUES(1001,'Java');
INSERT INTO class VALUES(1002,'C++');
INSERT INTO class VALUES(1003,'Python');
INSERT INTO class VALUES(1004,'PHP');
INSERT INTO class VALUES(1005,'Android');-- 向学生表插入数据
INSERT INTO student VALUES(1,'张三',20,1001);
INSERT INTO student VALUES(2,'李四',21,1002);
INSERT INTO student VALUES(3,'王五',24,1003);
INSERT INTO student VALUES(4,'赵六',23,1004);
INSERT INTO student VALUES(5,'小明',21,1001);
INSERT INTO student VALUES(6,'小红',26,1001);
INSERT INTO student VALUES(7,'小亮',27,1002);

1.带比较运算符的子查询

-- 查询张三同学所在班级的信息
SELECT * FROM class WHERE cid=(SELECT classid FROM student WHERE sname='张三')
-- 查询比张三同学所在班级编号还大的班级的信息
SELECT * FROM class WHERE cid>(SELECT classid FROM student WHERE sname='张三')

运行结果:

 

 

2.带EXISTS关键字的子查询

-- 它不产生任何数据只返回TRUE或FALSE。当返回值为TRUE时外层查询才会执行

-- 假如王五同学在学生表中则从班级表查询所有班级信息
SELECT * from class WHERE EXISTS (SELECT * FROM student WHERE sname="王五");

运行结果:

 

3.带ANY关键字的子查询

-- ANY关键字表示满足其中任意一个条件就返回一个结果作为外层查询条件。

-- 查询比任一学生所属班级号还大的班级编号
SELECT * FROM class WHERE cid > ANY(SELECT classid FROM student);

4.带ALL关键字的子查询

-- ALL关键字与ANY有点类似,只不过带ALL关键字的子査询返回的结果需同时满足所有内层査询条件。

-- 查询比所有学生所属班级号还大的班级编号
SELECT * FROM class WHERE cid>ALL(SELECT classid FROM student);

-- 总结 -- 重要(从关键字分析): -- 查询语句的书写顺序和执行顺序 -- select ===> from ===> where ===> group by ===> having ===> order by ===> limit -- 查询语句的执行顺序 -- from ===> where ===> group by ===> having ===> select ===> order by ===> limit


http://chatgpt.dhexx.cn/article/r0QBNdA9.shtml

相关文章

数据库基础操作

一、数据库的操作 数据库与客户端是通过网络进行交互的。 1、显示当前数据库 sql语句必须以 ; 结尾 show databases; 2、创建数据库 create database 数据库名; ->如果数据库sql敲错了,会有提示。 ->如果sql敲错了,可以按 ctrlc来终止sql。…

数据库的基本操作

目录 一、数据库的基本操作 1、数据库的登录及退出 2、查看所有数据库 3、显示数据库版本 4、显示时间 5、创建数据库 6、查看创建数据库的语句 7、查看当前使用的数据库 8、查看当前用户 9、使用某个数据库 10、删除数据库 二、数据表的基本操作 1、查看当前数据…

如何在IDEA上创建一个JSP项目【亲测有效】

idea上创建一个jsp项目 1、创建一个Java项目 2、创建成功后右击项目名称,点击Add Framework support 3、选择web application 选择适合版本,创建 4、创建成功后项目中会出现web文件夹 5、点击属性,进行配置 6、在project中配置jdk(你自己电脑…

Eclipse中安装配置Tomcat和创建JSP项目

这里写自定义目录标题 安装配置Tomcat创建JSP项目 安装配置Tomcat 下载并解压Tomcat到指定目录Eclipse菜单栏中找到Window–>Preperences->Server->Runtime Environments->Add 3.选择Tomcat文件夹 4.在Eclipse中找到Servers视图窗口,创建Tomcat服务…

springBoot+JSP搭建项目

1.springBoot对JSP的支持 springBoot虽然支持JSP,但是官方不建议使用,下面是官方文档解释 When running a Spring Boot application that uses an embedded servlet container (and is packaged as an executable archive), there are some limitations…

IntelliJ IDEA中创建jsp项目

创建java项目 首先需要创建一个普通的java项目 这一步很简单就不用多说了,按照正常操作来就行了 创建好的目录结果如下 创建Moudle 在IDEA中jsp项目是Project中的一个Moudle,因此我们就需要在jsp中创建一个moudle 然后Next 输入moudle名称 finishe…

IntelliJ IDEA 2021.1.2 x64版的 IDEA 创建 jsp项目

在创建jsp项目前需要 搭建JSP开发环境(配置Tomcat服务器):https://blog.csdn.net/qq_51444577/article/details/118409179 1、 创建jsp项目 先创建一个项目 创建一个java项目 一直按next键,给项目取个名如 jsp03,按…

使用eclipse创建的第一个jsp项目

1.创建web项目 首先打开eclipse->file->new->Dymanic Web Project(如果没有这个选项,选other,打开搜索web) 点finish,web项目创建成功 2.创建jsp 进行第一个jsp页面的编写。右键选择目录下面的WebRoot文件夹,然后new…

Java EE之idea创建和运行jsp项目

1.点击打开Inteliij点击Create New Project 2.点击java,再左侧Project SDK选择安装的jdk路径,勾选WebApplication和Create web.xml。点击next 4.再新弹出的窗口中,Project name中填写项目名称这里写的是Web0903,对应的Project location也会创建一个Web…

JSP项目引入Vue.js进行项目开发(工程搭建)

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面&#xff0…

eclipse创建第一个JSP项目

前言 ​ 本文的内容由四个部分组成,分别为①Tomcat的安装与配置,②创建第一个JSP项目,③打包JSP项目到Tomcat服务器上并在浏览器中运行,④eclipse的一些java Web的一些设置。 1、Tomcat安装与配置 ​ 到Tomcat官网下载Tomcat相…

Idea中新建Servlet+JSP项目

文章目录 前言一、Servlet 是什么?二、JSP 是什么?三、怎么在 IDEA 中新建 Servlet 项目?1. 新建项目2. 选择 Java Enterprise3. 选择 规范 Servlet步骤4. 删除不用的 pom.xml步骤5. 编辑运行配置,设置 JRE 总结 前言 随着学习 Ja…

jsp项目如何引入vue

如题,背景就不介绍了,项目是前后端不分离的,这让我一个转行前端对JSP语法不熟的人来说写起来着实难受。后来加了个考试的新功能,果断引入vue和element,还有polyfill.js,因为要兼容IE9。刚开始写的时候vue和…

使用eclipse开发jsp项目入门

JSP简介: jsp全称 Java server pages,是b/s (即browser/server 浏览器/服务器)架构软件开发使用的一种技术。开发b/s软件,除了使用jsp之外,还可以使用php ,asp等。以上三种有互联网3P之称。当…

使用idea创建一个jsp项目

1、创建一个普通的项目 2、开始将这个普通的java项目变为一个jsp的项目 选中这个项目名,然后右键,调出菜单之后,选择Add Frameworks Support 进去之后选择Web Application,然后OK(手贱没有截图就确定了,所…

idea创建jsp项目并运行

idea创建jsp项目并运行 如果未安装tomcat,请先安装tomcat:跳转至Apache Tomcat下载安装并配置 1.打开File->NEW->Project->Java Enterprise 2.在该页面中找到Projiect template挑选Web applocation 3.Applocation server->New Sever->…

idea中创建jsp项目详细步骤

安装条件:idea软件、tomcat10、jdk11 1、打开idea,在file ->new ->project中新建一个普通的java项目 ​​​​​​ 2、在项目名右键Add Framework Support选项中,Web Application上打勾,点击OK。 3、项目列表->web->…

JSP项目使用Tomcat启动

1.打开项目结构 2.新添加一个jdk,避免jar包冲突影响到其它的项目工程 3.选择jdk的本地安装文件,点击ok就行 4.点击号,找到本地的apache-tomcat的lib包下的所有jar包添加进来 5.点击应用 6.点击项目上方的编辑 7.添加tomcat服务,注意:是选择To…

idea 配置tomcat 运行jsp项目

1、复用idea打开jsp项目 2、添加tomcat配置 3、点击后会出现配置框,这里画框的地方都选上,版本选择1.8,其他的信息内容默认后,点击确认 4、点击 File->Project Structure,弹出界面选择Project,这里sdk选择1.8,语言选…

springboot-如何运行jsp项目?

直接用springboot官方自带的例子程序 运行程序 有异常&#xff0c;需要解决异常。 找不到servlet类&#xff0c;缺servlet jar 报错 Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext原因 没有引入servlet jar。 那就引入jar <!-- https:…