jpa 自定义sql if_数据产品经理必备之SQL基础
SQL語言是用于訪問和處理數(shù)據(jù)庫的標準的計算機語言,本文將從基本語法和高級語法兩方面來介紹SQL語言。
數(shù)據(jù)產(chǎn)品經(jīng)理從字面上看包含“數(shù)據(jù)”和“產(chǎn)品經(jīng)理”兩方面,是產(chǎn)品經(jīng)理領域中更加細分的數(shù)據(jù)領域。可見,“數(shù)據(jù)”之于“數(shù)據(jù)產(chǎn)品經(jīng)理”的重要性。
在不同的公司數(shù)據(jù)產(chǎn)品經(jīng)理可能會出現(xiàn)不同的名稱,比如“數(shù)據(jù)產(chǎn)品經(jīng)理”、“大數(shù)據(jù)產(chǎn)品經(jīng)理”、“數(shù)據(jù)平臺產(chǎn)品經(jīng)理”、“產(chǎn)品經(jīng)理(數(shù)據(jù)方向)”,但不管是什么樣的名稱,我們從招聘網(wǎng)站上面查閱數(shù)據(jù)產(chǎn)品經(jīng)理的職位描述,看到該領域的產(chǎn)品經(jīng)理所需要的素質和技能是類似的。
在阿里巴巴、百度、京東等互聯(lián)網(wǎng)公司的數(shù)據(jù)產(chǎn)品經(jīng)理職位描述中我們反復看到招聘信息中有關于求職者掌握SQL的描述,可見在數(shù)據(jù)產(chǎn)品經(jīng)理領域SQL已經(jīng)是和PPT、Excel一樣成為數(shù)據(jù)產(chǎn)品經(jīng)理必不可少的技能。
那么為什么數(shù)據(jù)產(chǎn)品經(jīng)理需要掌握SQL呢?
因為數(shù)據(jù)產(chǎn)品經(jīng)理需要經(jīng)常和數(shù)據(jù)打交道,而掌握SQL能夠獲取數(shù)據(jù),只有擁有了數(shù)據(jù)才能進一步進行數(shù)據(jù)探索設計數(shù)據(jù)產(chǎn)品。
SQL語言是用于訪問和處理數(shù)據(jù)庫的標準的計算機語言,下面我們將從基本語法和高級語法兩方面來介紹SQL語言。
SQL 基本語法
1. 操作數(shù)據(jù)庫
(1)創(chuàng)建數(shù)據(jù)庫
語法格式:
CREATE DATABASE [IF NOT EXISTS] [[DEFAULT] CHARACTER SET ] [[DEFAULT] COLLATE ];
語法說明:
- :創(chuàng)建數(shù)據(jù)庫的名稱。數(shù)據(jù)庫名稱必須符合操作系統(tǒng)的文件夾命名規(guī)則。
- IF NOT EXISTS:在創(chuàng)建數(shù)據(jù)庫之前進行判斷,只有該數(shù)據(jù)庫目前尚不存在時才能執(zhí)行操作。此選項可以用來避免數(shù)據(jù)庫已經(jīng)存在而重復創(chuàng)建的錯誤。
- [DEFAULT] CHARACTER SET:指定數(shù)據(jù)庫的默認字符集。
- [DEFAULT] COLLATE:指定字符集的默認校對規(guī)則。
示例:
創(chuàng)建數(shù)據(jù)庫database_name
create database database_name;
(2)刪除數(shù)據(jù)庫
語法格式:
DROP DATABASE [ IF EXISTS ]
語法說明:
- :指定要刪除的數(shù)據(jù)庫名。
- IF EXISTS:用于防止當數(shù)據(jù)庫不存在時發(fā)生錯誤。
- DROP DATABASE:刪除數(shù)據(jù)庫中的所有表格并且同時刪除數(shù)據(jù)庫。使用此語句時一定要慎重和小心,以免出現(xiàn)錯誤刪除。如果要使用 DROP DATABASE,需要獲得數(shù)據(jù)庫 DROP 權限。
示例:
刪除數(shù)據(jù)庫database_name
drop database database_name;
(3)修改數(shù)據(jù)庫
語法格式:
ALTER DATABASE [數(shù)據(jù)庫名] { [ DEFAULT ] CHARACTER SET | [ DEFAULT ] COLLATE }
語法說明:
- ALTER DATABASE 用于更改數(shù)據(jù)庫的全局特性。這些特性存儲在數(shù)據(jù)庫目錄的 db.opt 文件中。
- 使用 ALTER DATABASE 需要獲得數(shù)據(jù)庫 ALTER 權限。
- 數(shù)據(jù)庫名稱可以忽略,此時語句對應于默認數(shù)據(jù)庫。
- CHARACTER SET 子句用于更改默認的數(shù)據(jù)庫字符集。
示例:
修改數(shù)據(jù)庫database_name
alter database database_name rename to database_new_name;
(4)查看數(shù)據(jù)庫
語法格式:
SHOW DATABASES [LIKE ‘數(shù)據(jù)庫名’];
語法說明:
- LIKE 從句是可選項,用于匹配指定的數(shù)據(jù)庫名稱。LIKE 從句可以部分匹配,也可以完全匹配。
- 數(shù)據(jù)庫名由單引號’ ‘包圍。
示例:
查看所有數(shù)據(jù)庫
show databases;
(5)使用數(shù)據(jù)庫
語法格式:
USE
示例:
使用數(shù)據(jù)庫database_name
use database_name;
2. 操作數(shù)據(jù)表
(1)創(chuàng)建數(shù)據(jù)表
語法格式:
CREATE TABLE ([表定義選項])[表選項][分區(qū)選項];
其中,[表定義選項]的格式是: [,…]
語法說明:
- CREATE TABLE:用于創(chuàng)建給定名稱的表,必須擁有表CREATE的權限。
- :指定要創(chuàng)建表的名稱,在 CREATE TABLE 之后給出,必須符合標識符命名規(guī)則。表名稱被指定為 databaseb_name.table_name,以便在特定的數(shù)據(jù)庫中創(chuàng)建表。無論是否有當前數(shù)據(jù)庫,都可以通過這種方式創(chuàng)建。在當前數(shù)據(jù)庫中創(chuàng)建表時,可以省略 db-name。如果使用加引號的識別名,則應對數(shù)據(jù)庫和表名稱分別加引號。例如,’mydatabaseb’.’mytable’ 是合法的,但 ‘mydatabaseb.mytable’ 不合法。
- :表創(chuàng)建定義,由列名(column_name)、列的定義(column_definition)以及可能的空值說明、完整性約束或表索引組成。
- 默認的情況是,表被創(chuàng)建到當前的數(shù)據(jù)庫中。若表已存在、沒有當前數(shù)據(jù)庫或者數(shù)據(jù)庫不存在,則會出現(xiàn)錯誤。
示例:
創(chuàng)建了表table_name,包含類型為int的id列
create table table_name(id int);
(2)修改數(shù)據(jù)表
語法格式:
ALTER TABLE [修改選項];
其中,[修改選項]的格式是:
{ ADD COLUMN
| CHANGE COLUMN
| ALTER COLUMN { SET DEFAULT | DROP DEFAULT }
| MODIFY COLUMN
| DROP COLUMN
| RENAME TO }
示例:
修改數(shù)據(jù)表table_name使其添加name列
alter table table_name add name varchar(30);
(3)刪除數(shù)據(jù)表
語法格式:
DROP TABLE [IF EXISTS] [ , , ] …
語法說明:
- :被刪除的表名。DROP TABLE 語句可以同時刪除多個表,用戶必須擁有該命令的權限。
- 表被刪除時,所有的表數(shù)據(jù)和表定義會被取消,所以使用本語句要小心。
- 表被刪除時,用戶在該表上的權限并不會自動被刪除。
- 參數(shù)IF EXISTS用于在刪除前判斷刪除的表是否存在,加上該參數(shù)后,在刪除表的時候,如果表不存在,SQL 語句可以順利執(zhí)行,但會發(fā)出警告(warning)。
示例:
刪除數(shù)據(jù)表table_name
drop table table_name;
3. 操作數(shù)據(jù)
(1)插入數(shù)據(jù)
語法格式:
INSERT INTO [ [ , … ] ] VALUES (值1) [… , (值n) ];
語法說明:
- :指定被操作的表名。
- :指定需要插入數(shù)據(jù)的列名。若向表中的所有列插入數(shù)據(jù),則全部的列名均可以省略,直接采用 INSERTVALUES(…) 即可。
- VALUES 或 VALUE 子句:該子句包含要插入的數(shù)據(jù)清單。數(shù)據(jù)清單中數(shù)據(jù)的順序要和列的順序相對應。
示例:
insert into table_name (id)values (1);
(2)刪除數(shù)據(jù)
語法格式:
DELETE FROM [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]
語法說明:
語法說明如下:
- :指定要刪除數(shù)據(jù)的表名。
- ORDER BY 子句:可選項。表示刪除時,表中各行將按照子句中指定的順序進行刪除。
- WHERE 子句:可選項。表示為刪除操作限定刪除條件,若省略該子句,則代表刪除該表中的所有行。
- LIMIT 子句:可選項。用于告知在控制命令被返回數(shù)據(jù)前被刪除行的最大值。
示例:
刪除表table_name中全部數(shù)據(jù)
delete from table_name;
(3)修改數(shù)據(jù)
語法格式:
UPDATE SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句 ] [ORDER BY 子句] [LIMIT 子句]
語法說明:
- :用于指定要更新的表名稱。
- SET 子句:用于指定表中要修改的列名及其列值。其中,每個指定的列值可以是表達式,也可以是該列對應的默認值。如果指定的是默認值,可用關鍵字 DEFAULT 表示列值。
- WHERE 子句:可選項。用于限定表中要修改的行。若不指定,則修改表中所有的行。
- ORDER BY 子句:可選項。用于限定表中的行被修改的次序。
- LIMIT 子句:可選項。用于限定被修改的行數(shù)。
示例:
更新所有行的id列為0
update table_name set id=0
(4)查詢數(shù)據(jù)
語法格式:
SELECT {* | }
[
FROM , …
[WHERE
[GROUP BY
[HAVING [{}…]]
[ORDER BY ]
[LIMIT[,] ]
]
語法說明:
- {*|}包含星號通配符的字段列表,表示查詢的字段,其中字段列至少包含一個字段名稱,如果要查詢多個字段,多個字段之間要用逗號隔開,最后一個字段后不要加逗號。
- FROM ,…,表 1 和表 2 表示查詢數(shù)據(jù)的來源,可以是單個或多個。
- WHERE 子句是可選項,如果選擇該項,將限定查詢行必須滿足的查詢條件。
- GROUP BY< 字段 >,該子句用于按照指定的字段分組。
- [ORDER BY< 字段 >],該子句用于指定按什么樣的順序顯示查詢出來的數(shù)據(jù),可以進行的排序有升序(ASC)和降序(DESC)。
- [LIMIT[,]],該子句用于指定 每次顯示查詢出來的數(shù)據(jù)條數(shù)。
示例:
查詢表中全部記錄
select * from table_name;
SQL 高級語法
1. 操作符
操作符是一個保留字或字符,用于指定條件或者聯(lián)接多個條件。常見操作符有比較操作符、邏輯操作符、算術操作符。
(1)比較操作符
比較操作符是指等于=、不等于<>、大于>、小于=、小于等于<=
示例:
id = 1;id <> 1;id >1;id <1;id >=1;id <=1;
(2)邏輯操作符
邏輯操作符包括與NULL值比較 IS NULL、位于兩個值之間BETWEEN、與指定列表比較IN、與類似的值比較LIKE、多個條件與連接AND、多個條件或連接OR
示例:
id is null;id between ‘0’ and ’10’; id in (‘0′,’1′,’10’);id like ‘123%’;id > 10 and id <20; ;id = 10 or id =20;
(3)算術操作符
算術操作符有加法+、減法—、乘法*、除法/,支持組合使用
示例:
where col1 + col2 > ’20’;where col1 – col2 > ’20’;where col1 * 10 > ’20’;where (col1 / 10) > ’20’;
2. 連接
(1)內連接
語法格式:
SELECT
FROM INNER JOIN [ ON子句]
語法說明:
- :需要檢索的列名。
- :進行內連接的兩張表的表名。
示例:
select id,name from table1 inner join table2 on table1.cid=table2.cid;
(2)全連接
語法格式:
SELECT
FROM FULL JOIN [ ON子句]
語法說明:
- :需要檢索的列名。
- :進行全連接的兩張表的表名。
示例:
select id,name from table1 full join table2 on table1.cid=table2.cid;
(3)左連接
語法格式:
SELECT
FROM LEFT JOIN [ ON子句]
語法說明:
- :需要檢索的列名。
- :進行左連接的兩張表的表名。
示例:
select id,name from table1 left join table2 on table1.cid=table2.cid;
(4)右連接
語法格式:
SELECT
FROM RIGHT JOIN [ ON子句]
語法說明:
- :需要檢索的列名。
- :進行右連接的兩張表的表名。
示例:
select id,name from table1 right join table2 on table1.cid=table2.cid;
3. 視圖
視圖是一個虛擬表,包含一系列帶有名稱的列和行數(shù)據(jù),但視圖并不是數(shù)據(jù)庫真實存儲的數(shù)據(jù)表。存儲在數(shù)據(jù)庫中的查詢操作 SQL 語句定義了視圖的內容,列數(shù)據(jù)和行數(shù)據(jù)來自于視圖查詢所引用的實際表,引用視圖時動態(tài)生成這些數(shù)據(jù)。視圖的結構形式和表一樣,可以進行查詢、修改、更新和刪除等操作。
(1)創(chuàng)建視圖
語法格式:
CREATE VIEW AS
語法說明:
- :指定視圖的名稱。該名稱在數(shù)據(jù)庫中必須是唯一的,不能與其他表或視圖同名。
- :指定創(chuàng)建視圖的 SELECT 語句,可用于查詢多個基礎表或源視圖。
示例:
create view view_name as select * from table_name;
(2)查看視圖
語法格式:
DESCRIBE ;
語法說明:
- :查看的視圖名稱。該名稱在數(shù)據(jù)庫中必須是唯一的,不能與其他表或視圖同名。
示例:
describe view_name;
(3)修改視圖
語法格式:
ALTER VIEW AS
語法說明:
- :指定視圖的名稱。該名稱在數(shù)據(jù)庫中必須是唯一的,不能與其他表或視圖同名。
- :指定修改視圖的 SELECT 語句,可用于查詢多個基礎表或源視圖。
示例:
alter view view_name as select * from table_name;
(4)刪除視圖
語法格式:
DROP VIEW [ , …]
語法說明:
- :指定刪除的視圖名稱。
示例:
drop view view_name;
4. 索引
索引是一種十分重要的數(shù)據(jù)庫對象。索引是數(shù)據(jù)庫性能調優(yōu)技術的基礎,常用于實現(xiàn)數(shù)據(jù)的快速檢索。對表建立一個索引,在列上創(chuàng)建了索引之后,查找數(shù)據(jù)時可以直接根據(jù)該列上的索引找到對應記錄行的位置,從而快捷地查找到數(shù)據(jù)。索引存儲了指定列數(shù)據(jù)值的指針,根據(jù)指定的排序順序對這些指針排序。
(1)創(chuàng)建索引
語法格式:
CREATE ON ( [] [ ASC | DESC])
此外,還可以在CREATE TABLE 、ALTER TABLE時創(chuàng)建索引
語法說明:
- :指定索引名。一個表可以創(chuàng)建多個索引,但每個索引在該表中的名稱是唯一的。
- :指定要創(chuàng)建索引的表名。
- :指定要創(chuàng)建索引的列名。通常可以考慮將查詢語句中在 JOIN 子句和 WHERE 子句里經(jīng)常出現(xiàn)的列作為索引列。
- :可選項。指定使用列前的 length 個字符來創(chuàng)建索引。使用列的一部分創(chuàng)建索引有利于減小索引文件的大小,節(jié)省索引列所占的空間。在某些情況下,只能對列的前綴進行索引。索引列的長度有一個最大上限字節(jié)數(shù),如果索引列的長度超過了這個上限,就只能用列的前綴進行索引。另外,BLOB 或 TEXT 類型的列也必須使用前綴索引。
- ASC|DESC:可選項。ASC指定索引按照升序來排列,DESC指定索引按照降序來排列,默認為ASC。
示例:
create index index_name on table_name(column_name,column_name)
(2)刪除索引
語法格式:
DROP INDEX ON
語法說明:
- :要刪除的索引名。
- :指定該索引所在的表名。
示例:
drop index index_name on table_name
5. 事務
事務是并發(fā)控制的單位,是用戶定義的一個操作序列,主要用于處理操作量大,復雜度高的數(shù)據(jù)。這些操作要么都做,要么都不做,是一個不可分割的工作單位。通過事務,SQL能將邏輯相關的一組操作綁定在一起,以便保持數(shù)據(jù)的完整性。
一般來說,事務是必須滿足4個條件(ACID):原子性(Atomicity,又稱為不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱為獨立性)、持久性(Durability)。
(1)開始事務
語法格式:
BEGIN TRANSACTION |@
語法說明:
- @是由用戶定義的變量,必須用 char、varchar、nchar 或 nvarchar數(shù)據(jù)類型來聲明該變量。
- BEGIN TRANSACTION 語句的執(zhí)行使全局變量 @@TRANCOUNT 的值加 1。
示例:
begin transaction
(2)提交事務
語法格式:
COMMIT TRANSACTION |@
語法說明:
COMMIT TRANSACTION語句的執(zhí)行使全局變量 @@TRANCOUNT 的值減 1。
示例:
commit transaction
(3)撤銷事務
語法格式:
ROLLBACK [TRANSACTION] [| @ | | @
語法說明:
- 當條件回滾只影響事務的一部分時,事務不需要全部撤銷已執(zhí)行的操作。可以讓事務回滾到指定位置,此時,需要在事務中設定保存點(SAVEPOINT)。保存點所在位置之前的事務語句不用回滾,即保存點之前的操作被視為有效的。保存點的創(chuàng)建通過“SAVING TRANSACTION”語句來實現(xiàn),再執(zhí)行“ROLLBACK TRANSACTION”語句回滾到該保存點。
- 若事務回滾到起點,則全局變量 @@TRANCOUNT 的值減 1;若事務回滾到指定的保存點,則全局變量 @@TRANCOUNT 的值不變。
示例:
rollback
6. 約束
(1)主鍵約束
主鍵約束是一個列或者列的組合,其值能唯一地標識表中的每一行,這樣的一列或多列稱為表的主鍵,通過主鍵約束可以強制表的實體完整性。
語法格式:
PRIMARY KEY [默認值]
示例:
PRIMARY KEY(id)
(2)唯一約束
唯一約束要求該列唯一,允許為空,但只能出現(xiàn)一個空值。唯一約束能夠確保一列或者幾列不出現(xiàn)重復值。
語法格式:
UNIQUE
示例:
unique(id)
(3)外鍵約束
外鍵約束用來在兩個表的數(shù)據(jù)之間建立鏈接,它可以是一列或者多列。一個表可以有一個或多個外鍵。
語法格式:
[CONSTRAINT ] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES 主鍵列1 [,主鍵列2,…]
語法說明:
外鍵名為定義的外鍵約束的名稱,一個表中不能有相同名稱的外鍵;字段名表示子表需要添加外健約束的字段列;主表名即被子表外鍵所依賴的表的名稱;主鍵列表示主表中定義的主鍵列或者列組合。
示例:
foreign key(id)
(4)非空約束
非空約束(NOT NULL)可以通過 CREATE TABLE 或 ALTER TABLE 語句實現(xiàn)。在表中某個列的定義后加上關鍵字 NOT NULL 作為限定詞,來約束該列的取值不能為空。
語法格式:
NOT NULL;
示例:
id int(10) not null
(5)檢查約束
檢查約束基于行中其他列的值在特定的列中對值進行限制,用于限制列中的值的范圍。
語法格式:
CHECK
語法說明:
指的就是 SQL 表達式,用于指定需要檢查的限定條件。
示例:
check(id>0)
想了解更多的硬核知識點和精講架構視頻資料獲取方式關注,轉發(fā)后,后臺私信回復“架構資料”獲取
以及一些一線互聯(lián)網(wǎng)公司的面試題解析含答案
獲取方式:關注轉發(fā)+轉發(fā)+后臺私信回復‘架構資料’獲取加入程序員交流學習社群方式,以及一些收集整理資料。
總結
以上是生活随笔為你收集整理的jpa 自定义sql if_数据产品经理必备之SQL基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 东营泽惠雅居是毛坯房还是精装修?
- 下一篇: 电脑主板维修_自学电脑主板维修第48讲