一谭贪、什么是SQL?
?SQL 是用于訪問和處理數據庫的標準的計算機語言斤蔓。
二隆圆、SQL 能做什么漱挚?
? ? ? ?SQL 面向數據庫執(zhí)行查詢
? ? ? ?SQL 可從數據庫取回數據
? ? ? ?SQL 可在數據庫中插入新的記錄
? ? ? ?SQL 可更新數據庫中的數據
? ? ? ?SQL 可從數據庫刪除記錄
? ? ? ?SQL 可創(chuàng)建新數據庫
? ? ? ?SQL 可在數據庫中創(chuàng)建新表
? ? ? ?SQL 可在數據庫中創(chuàng)建視圖
? ? ? ?SQL 可以設置表、存儲過程和視圖的權限
三匾灶、在學語法之前,需要注意的是:
1. SQL 對大小寫不敏感
四租漂、SQL DML 和 DDL
可以把 SQL 分為兩個部分:數據操作語言 (DML) 和 數據定義語言 (DDL)阶女。
查詢和更新指令構成了 SQL 的 DML 部分:
SELECT- 從數據庫表中獲取數據
UPDATE- 更新數據庫表中的數據
DELETE- 從數據庫表中刪除數據
INSERT INTO- 向數據庫表中插入數據
SQL 的數據定義語言 (DDL) 部分使我們有能力創(chuàng)建或刪除表格颊糜。我們也可以定義索引(鍵),規(guī)定表之間的鏈接秃踩,以及施加表間的約束衬鱼。
SQL 中最重要的 DDL 語句:
CREATE DATABASE- 創(chuàng)建新數據庫
ALTER DATABASE- 修改數據庫
CREATE TABLE- 創(chuàng)建新表
ALTER TABLE- 變更(改變)數據庫表
DROP TABLE- 刪除表
CREATE INDEX- 創(chuàng)建索引(搜索鍵)
DROP INDEX- 刪除索引
五、具體的一些基本語法
1. select 語法
SELECT 列名稱 FROM 表名稱
SELECT * FROM 表名稱
SELECT?列名稱1憔杨,列名稱2 FROM 表名稱
2. select distinct
用來剔除掉一些重復的值鸟赫,用法同select
select distinct 列名稱 from 表名稱
3. where
SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值
其中運算符可以是常見的等號,大于號等消别,也可以是 between(在某個范圍內)抛蚤, like(搜索某種模式)
4. and? ?, or
顧名思義,就是或 和且 的關系
5. order by
對結果進行升序的排序
如果想要按照降序排序寻狂,可以語句末尾使用desc關鍵字
6. insert info 語句
可以向表格里面插入新的行
INSERT INTO 表名稱 VALUES (值1, 值2,....)
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
7. update?
去修改表中的數據
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
8. delete
DELETE FROM 表名稱 WHERE 列名稱 = 值
多說兩句:千萬別亂刪東西啊岁经,這些東西刪了,就找不回來了
所以我們DPW 這邊有弄個cronjob蛇券,每天定時去備份數據庫缀壤,放在IT那邊
9. TOP ,limit纠亚,rownum
規(guī)定要返回的記錄數目
注意:不是每個數據庫習題都支持top語句塘慕,但是有類似的
比如: SQL server的語法:
SELECT TOP number|percent column_name(s) FROM table_name
MySQL的語法
SELECT column_name(s) FROM table_name LIMIT number
Oracle的語法
SELECT column_name(s)? FROM table_name? WHERE ROWNUM <= number
三者舉例:
10. Like
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
舉例:
1. 表示查找B開頭的parameter_id 集合
2. 表示查找e為結尾的parameter_id 集合
提示:"%" 可用于定義通配符(模式中缺少的字母)。
也可以結合NOT 關鍵字蒂胞,表示反選?
eg :SELECT?*from?app_parameterwhere?parameter_idNOT?LIKE'B%';
11. 通配符
像上面說的 %图呢,就是一個通配符,常用通配符如下
注意:通配符必須和LIKE 一起使用
12 IN
IN 操作符允許我們在 WHERE 子句中規(guī)定多個值啤誊。
和where一起使用
13 between? and
這個寫法一般是取兩者之間的范圍岳瞭,可以是數值,文本或者日期
也可以結合NOT 蚊锹,取反
搜索結果
14 join?
為了得到完整的結果瞳筏,我們需要從兩個或者多個表中獲取結果,這時候就要用到join
Person:
這個表里面牡昆,id_P就是這個表的主鍵
然后看下Order 這個表
注意了姚炕,這邊的id_O是這個表的主鍵,同時丢烘,order表中的id_P引用了person里面的人柱宦,而無需使用它們的確切名字
所以,這兩個表播瞳,利用了id_P 掸刊,串聯(lián)了起來
可以這樣使用:
SELECT * FROM Persons, Orders WHERE Persons.Id_P = Orders.Id_P
在放我項目里,我舉個例子:
第一張表:?app_profile
第二張表:
現在赢乓,我想搜這兩張表的所有organation_id = =?9Nno1vGQUKpp3wf7_nGqg的數據
也可以用join 的關鍵字來表達忧侧,比如這兩句是等同的
不同的SQL JOIN
INTER JOIN 是屬于內連接石窑,和JOIN 一樣
LEFT JOIN: 不管右表中沒有匹配,都會從左表返回所有的行
RIGHT JOIN: 不管左表中沒有匹配蚓炬,都會從右表返回所有的行
FULL JOIN: 全部輸出左右表所有的行
15 UNION
用于合并兩個或者多個select語句的結果集
請注意松逊,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型肯夏。同時经宏,每條 SELECT 語句中的列的順序必須相同
舉個例子:
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
那這樣的結果就是:
16 select into
從一個表中選取數據,然后把數據插入另一個表中
常用于創(chuàng)建表的備份附件或用戶對記錄進行存檔
語法:
1. 把所有的列插入新表
SELECT * INTO new_table_name? FROM old_tablename
2. 只把希望的列插入新表
SELECT column_name(s) INTO new_table_name? FROM old_tablename
3. 也可以和where相結合
SELECT LastName,Firstname INTO Persons_backup FROM Persons WHERE City='Beijing'
后面的(17-28)比較Corner驯击,大家了解一下即可
17 create database
用戶創(chuàng)建數據庫烁兰,語法為:?CREATE DATABASE database_name
18 create table
用于創(chuàng)建表,語法為: create table tableName ( 列名稱1 數據類型余耽, 列名稱2 數據類型)
19 constraints
這個是約束缚柏,比如創(chuàng)建表后的一些約束
這個在下面會具體說到
20? not null?
強制約束不接受NULL 值
?create table tableName ( 列名稱1 數據類型 NOT NULL, 列名稱2 數據類型)
21 unique
強制約束唯一性
?create table tableName (列名稱1 數據類型 NOT NULL碟贾, 列名稱2 數據類型 UNIQUE)
22 PRIMARY KEY?
約束唯一表示數據庫的每條記錄?
?create table tableName ( 列名稱1 數據類型 PRIMARY KEY?币喧, 列名稱2 數據類型 UNIQUE)
23?FOREIGN KEY
24 check?
只能放入特定的值(true,false)
25 default?
默認值
26 create index?
創(chuàng)建索引
在不讀取整個表的情況下袱耽,索引使數據庫應用程序可以更快的查找數據
介紹下什么是索引
您可以在表中創(chuàng)建索引杀餐,以便更加快速高效地查詢數據
用戶無法看到索引,他們只能被用來加速搜索/查詢
語法:
27 drop (一定要慎用)
使用drop語句朱巨,可以撤銷索引史翘、表以及數據庫
刪除索引:?
刪除表:
刪除數據庫:
僅僅刪除表內的數據,不刪除表本身
28 ALTER? TABLE?
ALTER TABLE 語句用于在已有的表中添加冀续、修改或者刪除列
添加列 :?
刪除列:
29 AUTO INCREMENT?
auto increment 會在新紀錄插入表中時琼讽,生成一個唯一的數據
我們通常希望在每次插入新紀錄時,自動創(chuàng)建主鍵字段的值
語法:
默認?auto increment 是從1開始洪唐,要是從其他值開始钻蹬,要執(zhí)行這句:
ALTER TABLE Persons AUTO_INCREMENT=100
29 VIEW
視圖是可視化的表
SQL中,視圖是基于SQL語句的結果集的可視化的表
視圖包含行和列凭需,就像一個真實的表问欠。視圖的字段就是來自一個或者多個數據庫中真實的表中的字段。
我們可以像視圖添加SQL函數粒蜈,where以及join語句等
create view 語法:
視圖總是顯示最近的數據顺献,每當用戶查詢視圖時,數據庫引起通過SQL語句來重建數據
舉個例子:
創(chuàng)建view:
查看它:
更新視圖語法
例子:
查看結果就是:
撤銷視圖
DROP VIEW viewName
30 null
null值是遺漏的未知數據
默認枯怖,表的列可以存放null值
我們可以用 is null 或者 is not null 來判斷是否為空值,null 和 0 是不等價的