数据库II

DML:增删改表中数据

·1、添加数据:
		*语法:
			*insert into 表名(列名1,列名2,列名3....l列名n)value (值1,值2,值3 ...值n )
			*注意:
			1.列名和值要一一对应
			2.如果表名后,不定义列名,默认给所有列添加值  insert into  表名 values (值1,值2,值n);
			3.出了数字类型,其他类型需要使用引号引起来。
	2、删除数据:
		*语法:
			*delete from 表名 [where 条件]
		*注意
			*where 后不加条件 默认删除所有列
			 *truncate table 表名  --删除表 ,然后在创建一个同名的空表
	3、修改数据
	语法:
		*updata 表名 set 列名1=值1...[where 条件]
			*不加条件 会修改表中所有的数据

DQL:查询表中的记录

*select *from 表名
	1.语法:
	select 
		  字段名
	from
		表明列表
	where 
		条件列表
	group by 
		分组字段
	order by
		排序
	limit 	
		分页限定
	2.基础查询
		1.多个字段的查询
			select 字段名1,字段名2 ... from 表名
		2.去除重复
			*distinct
		3.计算列
			*一般可以使用四则运算计算一些类的值(一般只会进行数值型)
				*ifnull (val1,val2):null参与运算,计算结果都为null
				*val1:哪个字段判断是否为空
				*val2:如果该字段为null后的替换值
		4.起别名
			*as: as也可以省略
	3.条件查询
		1.where 字句后跟条件
		2.运算符
			*>,<,<=,>=,<>
			* between ...and
			* like
			*i s null
			* and 或&&
			or 或 ||
			*not 或 !

重点学习查询语句

 SQL语句的 单表查询:
 where 子句查询:
 	使用where 但条件查询
 	多条件查询 select * from 表名
 	--select * from stu where 字段名 is null 字段值为null
 	 	select * from stu where is null;
 	 		 	---查看入职日期在81年之后的员工信息
 	select * from stu where is nor null;
 		 	select * from stu where hiredate >='01-1月-1981' order by hiredate
 	--多个条件使用and关键字进行连接,筛选的是所有条件的值--查询名字中包含s的,以s开头的,以s结尾的,以第二个字符为s的
 	select * from stu where name like "%s%";s在中间的
 	select * from stu where name  like "s%";以s开头的
 	select  * from stu where name like "%s";以是结尾的
 	select * from stu where name like "_s%";以任意字符开头,查询第二个字符为s的
 	_ 表示任意一个字符   % 表示任意多个字符
 	select * from stu where name like '%/_%' escape '/';
 	‘/‘’’代表转义字符, escape 是将特殊字符转成转义字符--装一字符可以将特殊字符装成普通字符
 	select * from stu for update  //查询一份可以更改内容的表
 	select * from stu order by hiredate ;
 	---查询工资在2000-3000之间的员工
 	select * from stu where sal>=2000 and sal <=3000;
 	select * from stu where sal between 2000 and 3000;
 	--查询工作为saleman ,analyst ,manager 的员工信息
 	---使用or关键字,进行 或条件的查询
 	select * from stu where job=';saleman' or job = 'analyst' or job = 'manager' order by job ;
 	----使用in关键字来查询或的  只能是其中一项
 	select * from stu where job in ('saleman",'analyst','manager');
 	多条件子句查询(and ,or ,like .is null,is not null, in .between and)

DQL:查询语法

*1.排序查询   *语法: order by 子句 
desc:降序  asc  :默认
 * order by 排序字段1,排序方式1,...  
 *  2.聚合函数 :将一列数据作为一个整体,进行纵向计算
*count :计算个数
*max :计算最大值
* min:计算最小值
* sum:求和
* 注意:聚合函数的计算,排除非空的计算3.分组查询:
	语法:group by
	注意:
	1.分组之后查询的字段:分组字段,聚合函数
	2.where和having的区别 ?
		1.where 在分组之间进行限定,如果不满足条件,则不参与分组,having 在分组之后,如果不满足条件,则不参与分组,结果不会被查询出来
		2,where后不可以跟聚合函数,having可以进行聚合函数的判断
4.分页查询
		1.语法:limit开始的索引,每页查询的条数
	SELECT * FROM stu LIMIT 0,2;
	 SELECT * FROM stu LIMIT 2,2;
	SELECT * FROM stu LIMIT 4,2;
	 -- 当前的得索引: (当前的页数-1) *每页显示的条数

练习:

*--创建表st
 *CREATE TABLE st (
id INT ,
NAME VARCHAR(20),
age INT,
gender VARCHAR(4),
salary DOUBLE(7,2),
insert_time TIMESTAMP
);
DESC st;
INSERT INTO st (id,NAME,age,salary,insert_time) 
VALUES(1001,"王二丫",1,5000.0,NULL);

SHOW TABLES;
SELECT * FROM st; -- 查询st表
INSERT INTO st VALUES(1004,"赵无极",24,"男",45678.2,NULL);

ALTER TABLE st 
TRUNCATE TABLE stu;
SELECT * FROM stu;
-- 插入数据
INSERT INTO stu VALUES(1004,"赵敏",34,54,NULL,NULL,"男");
UPDATE stu SET id=1001 WHERE NAME="www";
UPDATE stu SET NAME ="王小宁" WHERE id =1001;
UPDATE stu SET gender ="女" WHERE id = 2004;
-- 查询 模糊查询
SELECT NAME FROM stu LIKE"张%";
SELECT * FROM stu;
SELECT id,age,score,id+age,id+score,FROM stu;
SELECT id, age ,id+age sumo  FROM stu;
SELECT id FROM stu WHERE age BETWEEN 18 AND 89;
SELECT id FROM stu WHERE age IN(34,54,235,34);
SELECT id , NAME  FROM stu WHERE NAME LIKE "_三%";
SELECT id ,NAME FROM stu WHERE NAME LIKE "___";
SELECT id ,NAME  FROM stu WHERE NAME LIKE "%张%";
-- 排序查询
SELECT * FROM stu ORDER BY insert_time;
SELECT COUNT(IFNULL(birthday,0)) FROM stu;
SELECT COUNT(birthday) FROM stu ;
SELECT COUNT(*) FROM stu;
SELECT SUM(salary) FROM stu;
SELECT AVG(id) FROM stu;
-- 分组查询
SELECT gender ,AVG(id) FROM stu GROUP BY gender;
SELECT gender ,AVG(id),COUNT(id) 人数 
FROM stu WHERE id >1500 GROUP BY gender;
SELECT gender ,AVG(id),COUNT(id) 人数
 FROM stu WHERE id >1500 GROUP BY gender HAVING COUNT(id)>1;
 -- 聚合函数
 SELECT gender ,AVG(id),COUNT(id) 人数
 FROM stu WHERE id >1500 GROUP BY gender HAVING 人数>1;
 SELECT * FROM stu LIMIT 0,2;
 SELECT * FROM stu LIMIT 2,2;
 SELECT * FROM stu LIMIT 4,2;
 
 -- 当前的得索引: (当前的页数-1) *每页显示的条数

约束

*概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性
* 分类:
* 主键约束 :primary key
* 非空约束  :not null
* 唯一约束 :unique
* 外键约束  :foreign key
*
*非空约束 ;not null
		1.创建表时 添加约束
		CREATE TABLE stt(
		id INT,
		NAME VARCHAR(20) NOT NULL -- name为非空);
		2.创建标完成后,添加非空约束
		Alter table stu modify name varchar(20);
*唯一约束:unique,某一列的值不能重复
	1.创建表时
	create table stt(
	id int,
	iphone_number varchar(20) unique);
2.创建表之后
Alter table stt modify iphone_number varchar(20) unique;
3.删除唯一约束
Alter table stt drop index phone_number;
4.唯一约束可以有null值,但是只能有一条记录为null

主键约束:primary key

	*1.注意:
		1.非空且唯一,
		2.一张表只能由一个字段为主键
		3.主键就是表中记录的唯一标识
	2.在创建时,添加主键约束
	CREATE TABLE stt(
		id INT PRIMARY KEY,
		NAME VARCHAR(20) UNIQUE);
	3.删除主键
		Alter table stu modify id int primary key;
		4.创建完表后,添加主键
		Alter  table stu modify id int primary key ;
		5.自动增长
			概念:如果某一列是数值类型,使用auto_increment 可以完成值的自动增长。
			1.创建表时自动增长
	CREATE TABLE stuu ( id INT PRIMARY KEY AUTO_INCREMENT,-- 给主键添加约束 NAME VARCHAR(20));
	INSERT INTO  stuu VALUES(NULL,'wsw');-- 删除自动增长  
	2.创建表后添加自动增长
	ALTER TABLE stuu MODIFY id INT auTO_INCREMENT;
	3.删除自动增长
	ALTER TABLE stuu MODIFY id INT ;
*外键约束 :foreign key
1.在创建表时 ,可以添加外键,让表和表产生关系,从而保证数据的正确性。
	*语法:
	create table 表名(
 		外键列
 		constraint 外键名称 foreign key(外键列名称));
 2.在创建表后,添加外键,
 ALTER TABLE employee ADD CONSTRAINT emp_dep_fk FOREIGN KEY(dep_id) REFERENCES department(id);
 Altertable 表名 add constraint 外键名称 foreign key (外键字段) reference
 主表名 (主表列名称)
 3.删除外键
 ALTER TABLE employee DROP FOREIGN KEY emp_dep_fk;

级联操作

1.添加级联操作
	 语法:alter table 表名 add constraint 外键名称 foreign key (外键字段名称)references 主表名称 on update  cascade on delete cascade;
2. 分类
	 1.级联更新 :on update cascade
	 2.级联删除  :on delete cascade

数据库的设计

1.多表之间的关系 :
	1. 一对一:比如:人和身份证 一人只能有一张省份证 一张身份证所属一个人
	2. 一对多(多对一):比如部门和员工 之间的关系 一个部门有多个员工,一个员工所属一个部门
	3. 多对多  :比如:学生和课程 学生可以选择多门课程,课程可以别多个学生选择
	4
2. 实现关系:
	1.一对多(多对一)
		*如:部门和员工 
		*实现方式:在多的一方建立外键,指向一的一方的主键
	2. 多对多
	3. 如学生和课程,实现方式,多对多需要借助第三张中间表,中间表至少有两个字段,这两个字段作为第三章表的外键,分别指向两站表的主键
简单数据库学习 就写到这里 .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值