知了堂学习笔记-SQL简单查询
Posted 柠檬仔仔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了知了堂学习笔记-SQL简单查询相关的知识,希望对你有一定的参考价值。
CREATE DATABASE 工厂; CREATE TABLE 车间( 车间号 INT PRIMARY KEY, 车间主任名称 NCHAR(10), 地址 NCHAR(10), 电话 INT ); CREATE TABLE 工人( 职工号 INT PRIMARY KEY, 姓名 NCHAR(10), 年龄 INT, 性别 NCHAR(10), 工种 NCHAR(10), 车间号 INT, FOREIGN KEY (车间号) REFERENCES 车间(车间号) ); CREATE TABLE 仓库( 仓库号 INT PRIMARY KEY, 仓库主任姓名 NCHAR(10), 电话 INT ); CREATE TABLE 工厂( 厂名 CHAR PRIMARY KEY, 厂长名 NCHAR(10), 车间号 INT, FOREIGN KEY (车间号) REFERENCES 车间(车间号) ); DROP TABLE 产品 DROP TABLE 产品_仓库; DROP TABLE 产品_零件 CREATE TABLE 产品( 产品号 INT PRIMARY KEY, 价格 INT, 车间号 INT, CONSTRAINT fk_child FOREIGN KEY (车间号) REFERENCES 车间(车间号) ); CREATE TABLE 零件( 零件号 INT PRIMARY KEY, 重量 INT, 价格 INT ); CREATE TABLE 车间_零件( 车间号 INT, 零件号 INT, PRIMARY KEY (车间号,零件号), FOREIGN KEY (车间号) REFERENCES 车间(车间号), FOREIGN KEY (零件号) REFERENCES 零件(零件号) ); CREATE TABLE 产品_零件( 产品号 INT, 零件号 INT, PRIMARY KEY (产品号,零件号), FOREIGN KEY (产品号) REFERENCES 产品(产品号), FOREIGN KEY (零件号) REFERENCES 零件(零件号) ); CREATE TABLE 产品_仓库( 产品号 INT, 仓库号 INT, PRIMARY KEY (产品号,仓库号), FOREIGN KEY (产品号) REFERENCES 产品(产品号), FOREIGN KEY (仓库号) REFERENCES 仓库(仓库号) ); -- 添加数据 INSERT INTO 工厂 VALUES(‘厂‘,‘厂长‘,125); INSERT INTO 工厂 VALUES(‘港‘,‘港长‘,125); INSERT INTO 车间 VALUES(125,‘李四‘,‘百草路‘,1546789); INSERT INTO 工人 VALUES(1,‘张三‘,20,‘男‘,‘搬运‘,125); INSERT INTO 仓库 VALUES(12,‘王五‘,1579); INSERT INTO 产品 VALUES(153,487,125); INSERT INTO 零件 VALUES(151,15,20); INSERT INTO 产品_仓库 VALUES(153,12); INSERT INTO 产品_零件 VALUES(153,151); INSERT INTO 车间_零件 VALUES(125,151); -- 查询 SELECT * FROM 工厂; DELETE FROM 工厂 WHERE 厂名 = ‘港‘; SELECT * FROM 工厂; -- 复制数据和表结构 CREATE TABLE 工厂_1 SELECT * FROM 工厂; -- 复制表结构 CREATE TABLE 工厂_2 SELECT * FROM 工厂 WHERE 1 = 2; -- 复制数据到相同结构的表 INSERT INTO 工厂_2 SELECT * FROM 工厂; -- 添加列 ALTER TABLE 工人 ADD 住址 VARCHAR(100) DEFAULT ‘成都‘; -- DATE精确到日 ALTER TABLE 工人 ADD 入职时间 DATE; -- 修改指定列数据 UPDATE 工人 SET 入职时间=‘2018-4-1‘ WHERE 职工号=‘1‘; ALTER TABLE 工人 DROP COLUMN 入职时间; ALTER TABLE 工人 ADD 入职时间 DATETIME; UPDATE 工人 SET 入职时间=‘2018-03-19 19:53:54‘ WHERE 职工号=‘1‘; ALTER TABLE 工人 DROP COLUMN 入职时间; ALTER TABLE 工人 ADD 入职时间 TIMESTAMP;-- 默认当前时间 ALTER TABLE 工人 CHANGE 入职时间 时间 TIMESTAMP; -- 建标end -- 2018/3/24 SQL查询语句 ALTER TABLE 工厂 ADD 工厂编号 INT ; ALTER TABLE 工厂 DROP COLUMN 工厂编号; -- 模糊查询 like ‘%‘ 多个 ‘_‘单个 SELECT * FROM 工厂 WHERE 厂长名 LIKE ‘刘%‘; SELECT * FROM 工厂 WHERE 工厂编号 >101 AND 工厂编号 <109; -- limit a,b 查询 第a之后b行的信息 SELECT * FROM 工厂 LIMIT 2,3; ALTER TABLE 仓库 ADD 厂名 CHAR; ALTER TABLE 仓库 ADD FOREIGN KEY (厂名) REFERENCES 工厂(厂名); SELECT 仓库号 FROM 仓库 WHERE 厂名 =‘成‘; -- 成都工厂下面有哪些工人 多表查询 SELECT * FROM 工厂 a, 工人 b WHERE a.`厂名`=‘成‘ AND a.`车间号`=b.`车间号`; SELECT * FROM 产品 b, 车间 a WHERE a.`地址`=‘成都‘ AND a.`车间号`=b.`车间号`; -- 2018/3/25 05_函数 -- 查找姓名为3个字的工人 SELECT * FROM 工人 WHERE CHAR_LENGTH(姓名)=3; -- 查询员工男女个数 用group by 分组 SELECT COUNT(*),性别,COUNT(*) FROM 工人 GROUP BY 性别; -- 查询车间主任的电话号码,但是电话号码的后4位用×隐藏 -- replace ()用于替换指定字符 SELECT 车间主任名称,REPLACE(电话,RIGHT(电话,4),‘XXXX‘) FROM 车间; -- 查询车间主任的电话号码,但是电话号码的中间4位用×隐藏 -- substring(str,pos,len):返回字符串str的位置pos起len个字符 SELECT 车间主任名称,REPLACE(电话,SUBSTRING(电话,2,4),‘XXXX‘) FROM 车间; -- SELECT DATEDIFF(SYSDATE(), ‘2018-01-01‘) 查询时间差 SELECT 时间,DATEDIFF(SYSDATE(), 时间) FROM 工人; -- 查询员工中男女生平均年龄 AVG求平均数 SELECT 性别 ,AVG(年龄) FROM 工人 GROUP BY 性别; -- 【扩展能力】查询各个车间对应男生和女生个数分别是多少。 SELECT 车间号,COUNT(性别),性别 FROM 工人 GROUP BY 车间号,性别;
基本SQL查询
创建数据库 CREATE DATABASE 工厂;
创建表 CREATAE TABLE 车间( );
删除表 DROP TABLE 车间;
建表同时加入数据类型 CREATE TABLE 车间(车间号 INT PRIMARY KEY,电话 INT);
建表后插入数据类型 ALTER TABLE 车间 ADD 车间名 VARCHAR(100);
建表后插入数据 INSERT INTO 车间 VALUES(1,159937564,‘柠檬仔’); 或 INSERT INTO 车间 (电话, 车间号, 车间名) VALUES (159937564,1,‘柠檬仔’);
删除表中数据 DELETE FROM 车间 WHERE 车间名=‘柠檬仔‘;
查询数据 SELECT * FROM 车间;
基本约束
建表的同时添加约束:
CREATE TABLE 车间(
车间号 INT PRIMARY KEY,
地址 VARCHAR(10)
);
CREATE TABLE 工人(
工人编号 INT PRIMARY KEY,
所属车间号 INT FOREIGN KEY (所属车间号) REFERENCES 车间(车间号); -- 建立外键约束 系统自动分配关系名
-- 或 所属车间号 INT CONSTRAINT 工人_车间 FOREIGN KEY (所属车间) REFERENCES 车间(车间号); 指定关系名为工人_车间
);
创建表后添加约束:
CREATE TABLE 车间(
车间号 INT PRIMARY KEY,
地址 VARCHAR(10)
);
CREATE TABLE 工人(
工人编号 INT,
所属车间号 INT
);
ALTER TABLE 车间 ALTER 地址 SET DEFAULT ‘柠檬仔’;
ALTER TABLE 车间 ADD CHECK(车间号>0);
ALTER TABLE 工人 ADD FOREIGN KEY (所属车间号) REFERENCES 车间(车间号);
ALTER TABLE 工人 ADD PRIMARY KEY 工人编号;
ALTER TABLE 工人 ADD UNIQUE (所属车间编号);
非空约束 NOT NULL
默认约束 DEFAULT XX
唯一约束 UNIQUE
值范围 CHECK (XX)
连接、嵌套查询
CREATE DATABASE 连接; CREATE TABLE 车间( 车间号 CHAR PRIMARY KEY, 车间地址 VARCHAR(20) NOT NULL ); CREATE TABLE 工人( 工人号 INT PRIMARY KEY, 车间号 CHAR, 电话 INT ); DROP TABLE 车间; DROP TABLE 工人; -- 向车间添加数据 INSERT INTO 车间 VALUES(‘A‘,‘成都‘); INSERT INTO 车间 VALUES(‘B‘,‘广州‘); INSERT INTO 车间 VALUES(‘C‘,‘郑州‘); INSERT INTO 车间 VALUES(‘D‘,‘厦门‘); INSERT INTO 车间 VALUES(‘G‘,‘福建‘); -- 向工人添加数据 INSERT INTO 工人 VALUES(1,‘A‘,156789555); INSERT INTO 工人 VALUES(2,‘B‘,123456789); INSERT INTO 工人 VALUES(3,‘C‘,456789456); INSERT INTO 工人 VALUES(5,‘C‘,123456789); INSERT INTO 工人 VALUES(6,‘D‘,123456784); INSERT INTO 工人 VALUES(4,‘F‘,456789123); -- 多表查询 工人车间的地址 SELECT a.`工人号` ,b.`车间地址` FROM 工人 a, 车间 b WHERE a.`车间号`=b.`车间号`; -- 左连 以工人为基表 工人表中工人号为4的车间不存在,查询结果为车间地址不存在 SELECT 工人.`工人号`, 车间.`车间地址` FROM 工人 LEFT JOIN 车间 ON 工人.`车间号`=车间.`车间号`; -- 右连 以车间为基表 车间表中不存在F车间,查询结果忽略不合法的工人号4 SELECT 工人.`工人号`, 车间.`车间地址` FROM 工人 RIGHT JOIN 车间 ON 工人.`车间号`=车间.`车间号`; -- INNER JOIN查询 取交集 SELECT 工人.`工人号`, 车间.`车间地址` FROM 工人 INNER JOIN 车间 ON 工人.`车间号`=车间.`车间号`; -- FULL mysql中不支持这种查询 SELECT 工人.`工人号`, 车间.`车间地址` FROM 工人 FULL JOIN 车间 ON 工人.`车间号`=车间.`车间号`; -- 查找每个厂员工总数 SELECT 工人. FROM 工人 RIGHT JOIN 车间 ON 工人.; -- 查询车间工人总数 嵌套查询 首先执行‘()’里面的代码讲查询出的结果(需要的信息)放到名为‘c’的虚表里 然后在虚表‘c’里面做查询 SELECT 车间地址, COUNT(工人号) FROM (SELECT 车间地址 , 工人号 FROM 工人 a RIGHT JOIN 车间 b ON a.`车间号`=b.`车间号`) AS c GROUP BY 车间地址; -- 查询工人数大于2的车间 SELECT 车间地址, COUNT(工人号) FROM (SELECT 车间地址 , 工人号 FROM 工人 a RIGHT JOIN 车间 b ON a.`车间号`=b.`车间号`) AS c GROUP BY 车间地址 HAVING COUNT(工人号)>=2; -- 总结 连接查询可以去除掉不合法的信息,对于需要大范围合法性比较比WHERE简便. 可以看为集合问题.
-- 嵌套查询先将查询出的有用数据放在一个虚表中然后利用多表查询 解决单表问题
欢迎指错 2018-04-09
以上是关于知了堂学习笔记-SQL简单查询的主要内容,如果未能解决你的问题,请参考以下文章
[知了堂学习笔记]_Java代码实现MySQL数据库的备份与还原
知了堂学习笔记JSP页面数据分页实现——分页概念以及主流数据库的分页查询