知了堂学习笔记-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

转载于:https://www.cnblogs.com/xiaoxu-xmy/p/8682236.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java.sql.SQLDataException: ORA-01861: 文字与格式字符串不匹配是一个数据库异常,它表示在比较或转换字符和格式字符串时发生了不匹配的情况。这个错误通常是由于在查询中使用了不兼容的数据类型或格式引起的。 为了解决这个问题,你可以尝试以下几个方法: 1. 检查你的查询语句中使用的参数和列的数据类型是否匹配。确保在比较或转换字符时使用正确的格式字符串。 2. 检查你的数据表中的数据是否符合你的查询要求。可能存在某些数据与你的格式字符串不匹配导致异常的情况。 3. 如果你的查询中使用了日期或时间相关的数据,确保使用的日期格式与数据库中存储的格式一致。 4. 确保你的数据库连接配置正确,包括时区设置和字符集设置等。 如果以上方法仍然无法解决问题,你可以进一步检查错误的堆栈跟踪信息,以便获取更详细的错误描述,并参考相应的数据库文档或寻求专业的数据库支持来解决这个问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ORA-01861: 文字与格式字符串不匹配问题](https://blog.csdn.net/llqq114/article/details/104062997)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [解决Exception java.sql.SQLException ORA-00600 内部错误代码](https://download.csdn.net/download/mybqo/5833429)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [java.sql.SQLDataException: ORA-01861: 文字与格式字符串不匹配](https://blog.csdn.net/weixin_42995083/article/details/104798621)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值