SQL(MySQL) 操作详记

SQL语言的特点

SQL是一种通用的、功能强大同时又简单易学的关系数据库语言,集数据查询、数据操纵、数据定义和数据控制四大功能于一体。

主要特点:

  • 综合统一
  • 高度非过程化
  • 面向集合的操作方式
  • 用同一种语法结构提供两种使用方式
  • 语言简洁,易学易用

SQL语言的基本概念

SQL语言支持关系数据库三级模式结构,外模式对应于视图和部分基本表;模式对应于基本表;内模式对应于存储文件
在这里插入图片描述
(1)可以用SQL语句对视图和基本表进行查询等操作。
(2)基本表是本身独立存在的表,是实际存储在数据库中的表。
(3)视图是从基本表或其他视图中导出来的表,它本身不独立存储在数据库中。视图是一个虚表。
(4)存储文件的逻辑结构组成了关系数据库的内模式,存储文件的物理结构是任意的,对用户是透明的。

数据定义语句

关系数据库系统支持三级模式结构,其模式、外模式和内模式中的基本对象有表、视图和索引。

在这里插入图片描述

基本表的定义

1.建表

create table <表名>(
	<列名><数据类型>[列级完整性约束条件]
	[,  <列名><数据类型>[列级完整性约束条件]] .......
	[,  <表级完整性约束条件>]
);

示例1

例如建立Test表

create table Test(
	prj_num   char(8)   PRIMARY KEY,
	prj_name  varchar(50),
	start_date  datetime,
	end_time  datetime,
	prj_status  bit
);

在这里插入图片描述
插入数据:
INSERT INTO test (prj_num, prj_name, start_date, end_time, prj_status) VALUES (‘20122215’, ‘西丽站电缆短路烧毁抢修工程’, ‘2020-11-27 00:00:00’, ‘2020-11-29 00:00:00’, b’1’);
在这里插入图片描述
示例2

create table Stock
(
	mat_num char(8) PRIMARY KEY,
   mat_name  varchar(50)  NOT NULL,  /*mat_num不允许为空值*/
   speci varchar(20)  NOT NULL,   /*speci不允许取空值*/
   warehouse char(20),
   amount int,
   unit decimal(18,2),
   total int as (`amount`*`unit`)  /*as为自动计算字段,不能输入值,表示总金额=数量*单价*/
);

在这里插入图片描述
示例3

create table Out_stock
(
	prj_num char(8),
   mat_num char(8),
   amount int,
   get_date datetime default now(),  /*get_date属性的默认值为系统时间*/
   department char(20),
   PRIMARY KEY(prj_num, mat_num), /*主键由两个属性组成,必须作为表级完整性约束*/
   FOREIGN KEY(prj_num) REFERENCES test(prj_num), /*表级完整性约束条件,prj_num是外键,被参照表是test*/
  	FOREIGN KEY(mat_num) REFERENCES stock(mat_num) /*表级完整性约束条件,mat_num是外键,被参照表是stock*/
);

在这里插入图片描述

2.基本表的修改

ALTER TABLE <表名>
[ADD <新列名><数据类型> | [完整性约束]]
[DROP COLUMN <列名> | <完整性约束>]
[ALTER COLUMN <列名><数据类型>];

示例1
向test表中添加一列

alter table test add prj_director varchar(10);

在这里插入图片描述

新添加的字段一律为空值null

示例2
向test表中删除特定列

alter table test drop COLUMN prj_director;

在这里插入图片描述
3.基本表的删除

DROP TABLE <表名>

删除out_stock表

drop table out_stock;

在这里插入图片描述

查询

SELECT [ALL | DISTINCT]<目标列表达式>[,<目标列表达式>]...  ---需要哪些列
FROM <表名或视图>[, <表名或视图名>]...   ---需要哪些表
[WHERE <条件表达式>]   ---根据什么条件
[GROUP BY <列名1>[HAVING<条件表达式>]]
[ORDER BY <列名2> [ASC|DESC]] ;
单表查询

(1)查询指定列

select mat_num, mat_name, speci from stock;

在这里插入图片描述
(2)查询全部的列

select * from stock;

在这里插入图片描述
(3)查询表获得时间间隔

select prj_name, start_date, end_time, datediff(end_time, start_date) AS DiffDate from test;

在这里插入图片描述
(4)消除表中的若干元组

select distinct warehouse from stock;

在这里插入图片描述
消除后
在这里插入图片描述
(5)查找满足条件的元组
常用的查询条件
在这里插入图片描述
stock表:
在这里插入图片描述

  • 比较大小查询
select mat_num, mat_name, speci, amount from stock where warehouse='1#仓库';

在这里插入图片描述

select mat_name, amount, unit from stock where unit<80;

在这里插入图片描述

  • 确定查询范围
select mat_name, amount, unit from stock where unit between 50 and 100;

或者

select mat_name, amount, unit from stock where unit>=50 and unit<=100;

在这里插入图片描述

  • 确定集合的查询
select mat_name, speci, amount from stock where warehouse in ('1#仓库','2#仓库');

或者

select mat_name, speci, amount from stock where warehouse='1#仓库' or warehouse='2#仓库';

在这里插入图片描述

  • 字符匹配的查询
select * from stock where warehouse like '1#仓库';

在这里插入图片描述

select * from stock where warehouse like '1#%';

在这里插入图片描述

  • 涉及空值的查询
select mat_num, mat_name from stock where unit IS NULL;

IS不能用等号代替
在这里插入图片描述

  • 多重条件查询
select mat_num, warehouse, amount from stock where mat_name='护套绝缘电线' and speci='BVV-120';

在这里插入图片描述
(6)对查询结果进行排序

ORDER BY <列名>[ASC | DESC][,...n]

示例1:
将查询结果按降序排列

select mat_name, unit from stock where mat_name='护套绝缘电线' order by unit DESC;

在这里插入图片描述
示例2:
查询结果按所在仓库名降序排列,同一仓库的物资按库存量升序排列

select * from stock order by warehouse DESC, amount;

在这里插入图片描述
(7)TOP子句用法
TOP n子句:在查询结果中输出前面的n条记录。
TOP n PERCENT 子句:在查询结果中输出前面占结果记录的n%条记录。

示例1:
显示stock表中库存量最大的两条记录

select * from stock order by amount DESC limit 0,2;

在这里插入图片描述
(8)聚集函数
常用聚集函数:
在这里插入图片描述
示例1:
统计项目数:

SELECT COUNT(*) FROM stock;

在这里插入图片描述
示例2:
查询1#仓库,amount最大数量,最小数量,平均值

select MAX(amount), MIN(amount), AVG(amount) from stock where warehouse='1#仓库';

在这里插入图片描述
结果:
在这里插入图片描述

(9)对查询结果进行分组
GROUP BY 子句将查询结果按某一列或多列的值分组,值相等的为一组。分组的目的是为了细化聚集函数的作用对象。

一般形式:

GROUP BY<分组依据列>[, ...n]
[HAVING<组提取条件>];

示例1:
查询使用两种及两种以上物资的工程号:

select prj_num 项目号, COUNT(*)物资种类 from out_stock group by prj_num;

原表:
在这里插入图片描述
查询结果:
在这里插入图片描述
(10)COMPUTE BY 子句
T-SQL提供了COMPUTE BY子句,允许在结果集内生成控制中断和小计,得到更详细的或总的记录。它把数据分成较小的组,然后在每组建立详细记录结果数据集,也可为每组产生总的记录。
其语法格式:

[COMPUTE {AVG|COUNT|MAX|MIN|SUM}(表达式)[, ...n]]
[BY 表达式[,...n]]

注:MySQL不支持COMPUTE BY

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值