groovy怎样从sql语句中截取表名_SQL基础教程学习笔记

点击上方SQL数据库开发,关注获取SQL视频教程

SQL专栏

SQL数据库基础知识汇总

SQL数据库高级知识汇总

1.数据库和SQL

RDBMS:关系数据库管理系统

比较代表性的有:Oracle(甲骨文)、SQL Server(微软)、DB2(IBM),Postgres(开源)、MySQL(开源)

数据库由表示数据项目的列(字段)和表示行的(记录)所组成,行和列的交汇的方格是单元格,关系数据库以行为单位读取数据

SQL概要

sql通过一条语句来描述想要进行的操作,发送给RDBMS,原则上使用分号结尾

根据目的可以分为:DDL、DML、DCL

SQL语句及其种类

SQL用关键字、表名、列名等组合一条语句(SQL语句)来描述内容

DDL:数据定义语言(用来创建或者删除存储数据用的数据库以及数据库中的表等对象)

以下指令:create、drop、alter

DML:数据操纵语言(用来查询或者变更表中的记录)

用户操作增删改查(insert、delete、update、select)

DCL:数据控制语言(用来确认或取消数据库中的数据进行变更以及对RDBMS的用户是否有权限操作数据库进行设定)

commit:确认对数据库中的数据进行变更

rollback:取消对数据库中的数据进行变更

grant:赋予用户权限

revoke:取消用户的操作权限

SQL的基本书写规则

以";"结尾,关键字不区分大小写,字符串和日期需要用单引号括起来,数字常数不用

1.1 表的创建
通过create table语句创建而成 指定列的数据类型(整数型,字符型,日期型) 可以在表中设置约束 在同一数据库中不能创建两个相同名称的表 数据类型表示数据的种类,每一列不能存储与该列数据类型不符的数据(INTERGER:数字型,CHAR:定长字符型(未达到最大长度时空格补足),VARCHAR:可变长字符串,DATE:日期型) 约束设置:约束是除了数据类型之外,对列中存储的数据进行限制或者追加条件的功能 NOT NULL(非空),PRIMARY KEY(主键)
1.2表的删除和更新

用DROP TABLE语句来删除

drop table <表名>; -- 删除表是无法恢复的

用ALTER TABLE 语句向表中添加列或者删除列

alter table <表名> add column <列的定义>;  --添加
alter table <表名> drop column <列名>; --删除

2 查询基础

列的查询,从表查询使用的是SELECT语句; select列举了想查询表的名称,from制定了选取数据表的名称; 用as指定别名,中文用双引号包括;
-- 删除重复的数据行用distinct,只能写在第一个列名前select distinct 列名 from 表名;

-- where语句来选择记录过滤条件
select <列名> from <表名> where <条件表达式>;

-- 注释有两种一种是单行的"--",第二个是多行的"/*"和"*/"之间,可以跨多行,并且可以写在select语句中

/* 比较运算符 四则运算(可以在select语句中使用) null(所有包含null的运算都是null) 比较运算符
"1","2","3","10","11","222",按照大小顺序,分别是:"1","10","11","2","222","3",因为是字符串,类比章节1-1,2,3-10,4-1 */

逻辑运算符
AND运算符 优于 OR运算符 A AND B OR C --先执行A和B再执行C 如果想执行A和B或者C的结果,需要加一个括号,即 A AND (B OR C)
-- 逻辑积(x)和逻辑和(+),将真变为1,假变为0

--在SQL中存在既不是真也不是假的第三值就是----不确定(三值逻辑)

3 聚合与排序

3.1聚合查询
-- 使用聚合函数对表中列进行计算合计值、平均值等的汇总操作;
-- 除了count函数外的聚合函数可以进行对NULL以外的对象进行汇总;count可以查出包括null在内的所有的行;
count:计算表中的行数
SUM:列中数据的合计值
AVG:列中数据的平均值
MAX:列中数据的最大值
MIN:列中数据的最小值
-- 用于汇总的函数称为聚合函数,聚合就是多行汇聚成一行,所有的聚合函数都是输入一行输出一行
-- max和min函数几乎适用于所有数据类型的列,sum和avg只适用与数值型的列-- 使用聚合函数删除重复值(distinct)
select count(distinct product_type) from Product;
3.2 对表进行分组

使用group by 进行分组

select <列名>,<列名2>,<列名3>....

from <表名>

where 条件

group by <列名>,<列名2>,<列名3>

-- group by写在from语句之后(如果有where子句写在where子句后),先根据where子句指定条件过滤再汇总
select → from → where → group by 书写顺序
from → where → group by → select 执行顺序
使用group by子句时,select子句中不能出现聚合函数之外的列名 group by子句中不能使用select子句定义的别名 group by子句显示的是无序的 只有select子句和having子句(以及order by)能够使用聚合函数 与聚合函数Group by子句有关的常见错误 只能写在字句中 group by子句中不能使用select子句中列的别名,因为select执行在group by之后,所以select中定义的别名无法识别 结果是无序的 where子句中不能使用聚合函数
3.3为聚合结果指定条件

where 子句用来指定数据行的条件,having子句用来指定分组的条件

select → from where → group by → having  -- 书写顺序

having子句能够使用的3种要素

  • 常数

  • 聚合函数

  • group by 子句中指定的列名(聚合键)

where子句 = 指定行所对应的条件

having子句 = 指定组所对应的条件

聚合键所对应的条件应该写在where中,而不是having

3.4 对查询结果进行排序

select <列名1>,<列名2>,<列名3>...

from <表名>

order by <排序基准1>,<排序基准2>....

select → from → where → group by → having → order by --书写顺序
from → where → group by → having → select → order by --执行顺序
本来select结果是无序的,用order by子句对结果进行排序,用asc进行升序,desc进行降序,默认升序; order by可用select子句定义列的别名,因为select执行顺序在order by之前,select中别名可以被识别 可以使用select子句中未使用的列或者聚合函数 在order by子句中不要使用编号 指定多个排序键,并且可以同时指定不同的排序顺序,排序的列中含有NULL值时,不能对null使用比较运算符,null值会在结果的开头或者结尾显示.

4 数据更新

4.1 数据的插入
使用insert向表中插入数据,原则上,每次执行一次数据的插入 (列名,值)这种形式称为清单 可以为表中的列设置默认值,可以在create时设置default约束设定 插入值默认值可以通过两种是方式,在insert语句的values子句中指定default关键字(显示方法),或省略列清单(隐式方法)

insert into <表名> (列1,列2,列3...)

values (值1,值1,值3...)

insert into Product (product_id,product_name,product_type,sale_price,purchase_price,regist_date)

values ('0001','T恤衫','衣服',1000,500,'2009-09-20');

多行插入需要将多条values子句通过逗号进行分隔排列

向表中某一列赋予null值,可以直接在值清单中对应位置,但是该列不能设置not null约束

插入默认值有两种方式,显式和隐式

-- 显式  建议使用显式,可以清楚知道该列是使用了默认值insert into Product (product_id,product_name,product_type,sale_price,purchase_price,regist_date) values ('0001','T恤衫','衣服',default,500,'2009-09-20');-- 隐式 将设置了默认值的列清单和值清单中该列省略即可insert into Product (product_id,product_name,product_type,purchase_price,regist_date) values ('0001','T恤衫','衣服',500,'2009-09-20');

如果在清单中省略了没有设置默认值的列,该列的值就会被设定为null,因此如果省略的是设置了not null的列,insert就会出错,

从其他地方复制数据

除了使用value子句指定具体的数据,还可以从其他表中复制数据,首先建立一个和Product表结构相同的表ProductCopy

insert into ProductCopy (product_id,product_name,product_type,sale_price,purchase_price,regist_date)select product_id,product_name,product_type,sale_price,purchase_price,regist_date from Product  --不会对原结构有影响,相当于进行了备份
4.2 数据的删除

如果想删除整个表,使用drop table语句,如果想删除表中数据,用delete,

drop table语句和delete语句

删除数据可以将表完全删除、

delete语句会留下表(容器),而删除表中全部数据

delete from <表名>;  --保留数据表,仅仅删除全部数据,delete删除对象并不是表或者列,而是记录(行)

指定删除对象的delete语句(搜索型delete)

delete from <表名> where <条件>;  --delete中只用where,不用group by和having和order by
delete from Product where sale_price >=4000; --通过where子句指定对象条件来删除部分数据
select * from Product; --使用该句进行确认

删除和舍弃

标准sql中从表中删除数据的只有delete,还有数据库产品还存在truncate的语句,truncate是舍弃的意思

truncate <表名>; --与delete不同的是,truncate只能删除表中的全部数据,不能删除部分数据,处理速度比delete快
4.3 数据的更新

使用update语句个亿更改表中数据

update <表名> set <列名> = <表达式>;
update Product set registe_date = '2009-10-10';

搜索型update

update <表名> set <列名> = <表达式> where <条件>;update Product set sale_price = sale_price *10 where product_type = '厨房用具';

使用update语句可以将值清空为null(仅限于未设置not null约束的列)

--多列更新
1
update Product
set sale_price = sale_price *10,
purchase_price = purchase_price/2
where product_type = '厨房用具';

2
update Product
set (sale_price,purchase_price) = (sale_price *10,purchase_price/2)
where product_type = '厨房用具';
-- 需要注意点但是第一种方法在所有的DBMS中是通用的,第二种将列清单化在某些DBMS中是不通用的
4.4 事务

事务需要在同一个处理单元中执行的一系列更新处理的集合,通过使用事务,可以对数据库中的数据更新处理的提交和取消进行管理

事务处理的终止指令包括commit(提交处理)和rollback(取消处理)

事务的四大特性:原子性、一致性、隔离性、持久性

-- 事务开始语句
--SQL Server、PostgreSQL
begin transaction
-- MySQL
start transaction
--Oracle、DB2


--结束事务只有commit 和 rollback两种
-- MySQL
start transaction;
update Product
purchase_price = purchase_price/2
where product_type = '客厅用具';
update Product
set sale_price = sale_price *10
where product_type = '厨房用具';
commit;
结束事务的指令: commit是提交事务包含的全部更新处理的结束指令,相当于文件处理的覆盖保存,一旦提交,无法恢复到处理事务开始的前的状态,commit = 直线进行,万一误操作,只能重新建表,重新插入数据 rollback取消处理是取消事务包含的全部更新处理的结束指令,相当于放弃保存,一旦回滚,数据库就会恢复到事务开始前的状态,rollback = 掉头回到起点
ACID特性
原子性(Atomicity) 指事务结束的时候,其中包含的更新处理要么全部执行,要么完全不执行 一致性(Consistency) 是事务中包含的处理要满足数据库提前设置的约束,如主键约束或者not null约束,也称为完整性 隔离性(Isolation) 保证各个事务间互不干扰的特性。 该特性保证了了事务之间不会互相嵌套,另外在某个事务中进行的更改,在该事务 结束之前,对其他事务而言是不可见的。 持久性(Durability) 指的是事务结束之后DBMS能够保证该时间点的数据状态会被保存的特性,即使由于数据故障导致数据丢失,数据库也一定能通过某种手段进行恢复,最常见的是通过日志恢复到故障发生前的状态。 ——End——

关注SQL数据库开发公众号,在后台回复关键字:资料领取,可以获取一份精心整理的技术干货。

推荐阅读

  • 惊恐,还真有大神把地府后台管理系统做出来了,“阎王爷”疯狂点赞!附地址

  • 续 | 几道常见的SQL面试题,看你能答对几道

  • 24个必须掌握的数据库面试问题~

ee0bc7bdded73df216385b8064daffad.png

点击「」了解SQL训练营

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值