知了堂学习笔记-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简单查询的主要内容,如果未能解决你的问题,请参考以下文章

[知了堂学习笔记]_mysql函数

[知了堂学习笔记]_Java代码实现MySQL数据库的备份与还原

知了堂学习笔记JSP页面数据分页实现——分页概念以及主流数据库的分页查询

[知了堂学习笔记]_初始化顺序

知了堂学习笔记/利用JavaScript对手风琴的实现/Aidrich

知了堂学习笔记java基础知识之继承