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 bydelete 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個必須掌握的數據庫面試問題~
點擊「」了解SQL訓練營
總結
以上是生活随笔為你收集整理的groovy怎样从sql语句中截取表名_SQL基础教程学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python因子分析案例_Python—
- 下一篇: 很多字段的数据要插入另一张表_一文看懂数