一、SQL概述sql是結構化查詢語言(Structured Query Language,SQL)是專門用來與數(shù) 據(jù)庫通信的語言,它可以幫助用戶操作關系數(shù)據(jù)庫。 SQL的特點: SQL不是某個特定數(shù)據(jù)庫供應商專有的語言; SQL簡單易學 ;SQL強大、靈活,可以進行非常復雜和高級的數(shù)據(jù)庫操作 SQL的組成:
*******************數(shù)據(jù)定義語言********************** CREATE 創(chuàng)建數(shù)據(jù)庫或數(shù)據(jù)庫對象 ALTER 對數(shù)據(jù)庫或數(shù)據(jù)庫對象進行修改 DROP 刪除數(shù)據(jù)庫或數(shù)據(jù)庫對象 ************數(shù)據(jù)操縱語言(Data Manipulation Language,DML)*********** SELECT 從表或視圖中檢索數(shù)據(jù) INSERT 將數(shù)據(jù)插入到表或視圖中 UPDATE 修改表或視圖中的數(shù)據(jù) DELETE 從表或視圖中刪除數(shù)據(jù) ***************數(shù)據(jù)控制語言(Data Control Language,DCL)**************** GRANT 用于授予權限 REVOKE 用于收回權限
二、MySQL預備知識嵌入式和動態(tài)SQL規(guī)則:規(guī)定了SQL語句在高級語言程序設計中 使用的規(guī)范方法,以便適應較為復雜的應用 SQL 調 用(以便提高SQL的靈活性、有效性、共享性以及使SQL具有更多的高級語言的特征):SQL 例 程、調 用 規(guī) 則 MySQL使用基礎:LAMP模式 、WAMP模式 L(Linux) A(Apache)M(MySQL) P(PHP、Perl、Python)
關系數(shù)據(jù)庫管理系統(tǒng)(RDBMS):優(yōu)點:體積小、速度快、開放源代碼、遵循GPL MySQL擴展語言要素 常量:也稱字面值或標量值
變量:
表達式 表達式是常量、變量、列名、復雜計算、運算符和函數(shù)的組合。
三、數(shù)據(jù)定義(DDL)創(chuàng)建數(shù)據(jù)庫(CREATE):使用CREATE DATABASE 或 CREATE SCHEMA語句 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT]CHARACTER SET[=]charset_name |[DEFAULT]COLLATE[=]collation_name 例句:create DATABASE test_sy CHARACTER SET ="UTF8" COLLATION ="utf8_general_ci"; CREATE DATABASE mysql_test;
查看數(shù)據(jù)庫(SHOW):查看數(shù)據(jù)庫的所有表 SHOW {DATABASES | SCHEMAS} [LIKE’pattern’ | WHERE expr] Like關鍵字用于匹配指定的數(shù)據(jù)庫名稱; Where從句用于指定數(shù)據(jù)庫名稱查詢范圍的條件 例句:SHOW DATABASES; SHOW DATABASES LIKE "%test%"; SHOW TABLES:查看數(shù)據(jù)庫非系統(tǒng)表
選擇數(shù)據(jù)庫(USE):USE db_name; 從一個數(shù)據(jù)庫“跳轉”到另一個數(shù)據(jù)庫。 修改數(shù)據(jù)庫:alert mysql>ALTER DATABASE mysql_test -> DEFAULT CHARACTER SET gb2312 -> DEFAULT COLLATE gb2312_chinese_ci; 刪除數(shù)據(jù)庫: DROP{DATABASE|SCHEMA}[IF EXISTS]db_name 例句:DROP DATABASE hahaha; DROP DATABASE IF EXISTS hahaha; *****************************表定義********************************** 創(chuàng)建表:數(shù)據(jù)表是關系數(shù)據(jù)庫中最重要、最基本的數(shù)據(jù)對象, 也是數(shù)據(jù)存儲的基本單位。 數(shù)據(jù)表, 被定義為字段的集合 按(行 )和(列 )的格式來存儲的, 每一( 行)代表一條記錄, 每一(列 )代表記錄中一個字段的取值。 CREATE[TEMPORARY]TABLE tbl_name ( 字段名1 數(shù)據(jù)類型 [列級完整性約束條件][默認值] [,字段名2 數(shù)據(jù)類型 [列級完整性約束條件][默認值]] [,……] [,表級完整性約束條件] )[ENGINT=引擎類型]; 若添加“TEMPORARY”,則為臨時表 在一個已有數(shù)據(jù)庫mysql_test中新建一個包含客戶姓名、性別、地址、 聯(lián)系方式等內容的客戶基本信息表,要求將客戶的id號指定為該表的 主鍵。
PRIMARY KEY(cust_id):指定主鍵 數(shù)據(jù)類型:
更新表(ALTER):使用ALTER TABLE語句,增加或刪減列、創(chuàng)建或取消索引、更改原有列的 數(shù)據(jù)類型、重新命名列或表,更改表的評注和表的引擎類型,為表重新創(chuàng) 建觸發(fā)器、存儲過程、索引和外鍵等。 1、ADD COLUMN 例如:向數(shù)據(jù)庫mysql_test的表customers中添加一列,并命名為 cust_city,要求其不能為NULL,默認值為字符串“Wuhan”,且該列位 于原表cust_sex列之后。 ALTER TABLE mysql_test.customers ->ADD COLUMN cust_city char(10)NOT NULL DEFAULT ‘Wuhan’ AFTER cust_sex; 2、CHANGE[COLUMN]子句 修改表中列的名稱或數(shù)據(jù)類型
3、ALTER[COLUMN]子句 修改或刪除表中指定列的默認值 ALTER TABLE mysql_test.customers ->ALTER COLUMN cust_city SET DEFAULT ‘Beijing’; 4、MODIFY[COLUMN]子句 只修改指定列的數(shù)據(jù)類型,不會干涉它的列名 ALTER TABLE mysql_test.customers ->MODIFY COLUMN cust_name char(20) FIRST; 5、DROP[COLUMN]子句 刪除表中多余的列 ALTER TABLE mysql_test.customers ->DROP COLUMN cust_contact; 6、RENAME[TO]子句 為表重新賦予一個表名 ALTER TABLE mysql_test.customers ->RENAME TO mysql_test.backup_customers; 給表重命名表的第二種寫法:RENAME TABLE db_a.old_table TO db_b.new_table; 7、DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [ ,tbl_name ] … [RESTRICT | CASCADE]
查看表結構: SHOW [FULL] COLUMNS {FROM | IN} tbl_name[{FROM | IN} db_name] [LIKE’pattern’ | WHERE expr] 例如:SHOW COLUMNS FROM t_role; {DESCRIBE | DESC} tbl_name [col_name | wild] 例如:DESC t_role; ********************************************索引**************************************** 索引:索引是提高數(shù)據(jù)文件訪問效率的有效方法 索引存在的弊端: 1)索引是以文件的形式存儲的,如果有大量的索引,索引文件可能比數(shù)據(jù) 文件更快達到最大的文件尺寸; 2)索引在提高查詢速度的同時,會降低更新表的速度。 索引的分類:索引通常被創(chuàng)建成單列索引和組合索引
索引的創(chuàng)建 Create index
例如:在數(shù)據(jù)庫mysql_test的表customers上,根據(jù)客戶姓名列的前三個 字符創(chuàng)建一個升序索引index_customers。 create index index_customers on mysql_test.customers (name(3) ASC); 在數(shù)據(jù)庫mysql_test的表customers上,根據(jù)客戶姓名列和客戶id 號創(chuàng)建一個組合索引index_cust。 create index index_cust on mysql_test.customers (cust_name,cust_id);
索引的創(chuàng)建:使用ALTER TABLE語句創(chuàng)建
例如:使用ALTER TABLE語句在數(shù)據(jù)庫mysql_test中表seller的姓名上添加一列 非唯一的索引,取名為index_seller_name。 ALTER TABLE mysql_test.seller ADD INDEX index_seller_name(seller_name); 索引的查看(SHOW INDEX ) SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name ] [WHERE expr] SHOW index FROM t_test.tb_dept; 索引的刪除:使用DROP INDEX語句 DROP INDEX index_name ON tbl_name; 索引的刪除:使用ALTER TABLE語句
例如:使用ALTER TABLE語句刪除數(shù)據(jù)庫mysql_test中表customers的主鍵和索引 index_customers。
四、數(shù)據(jù)更新(數(shù)據(jù)操縱語言DML)插入數(shù)據(jù)
例如: 1、使用INSERT…VALUES語句向數(shù)據(jù)庫mysql_test的表customers中 插入這樣一行完整數(shù)據(jù):(901,張三 ,F(xiàn),北京市,朝陽區(qū)) INSERT INTO mysql_test.customers VALUES (901,’張三’,’F’,’北京市’,’朝陽區(qū)’); 2、使用INSERT…VALUES語句向數(shù)據(jù)庫mysql_test的表customers中插入這樣一行 數(shù)據(jù),要求該數(shù)據(jù)目前只用明確給出cust_name列和cust_address列的信息,即分別為 ‘李四’‘武漢’,而cust_id由系統(tǒng)自動生成,cust_sex列選用表中默認值,另外 cust_contact列的值暫不確定,可不用指定 INSERT INTO mysql_test.customers VALUES (0,’李四’,DEFAULT,’武漢市’,NULL); ********************使用INSERT…SET語句插入部分列值數(shù)據(jù)*************************** 語法:INSERT [INTO] tbl_name SET col_name={expr | DEFAULT},… 例如:使用INSERT…SET語句向數(shù)據(jù)庫mysql_test的表customers中插入 數(shù)據(jù):名為李四 ,地址為武漢,性別默認 insert into mysql_test.customers set cu_name="李四",cu_address="武漢",cu_sex=DEFAULT; ***********************使用INSERT…SELECT語句插入子查詢數(shù)據(jù)**************************** 語法:INSERT [INTO] tbl_name [(col_name,…)] SELECT… 例句:INSERT INTO db1_name (field1,field2) SELECT field1,field2 FROM db2_name; 刪除數(shù)據(jù) 語法:DELETE FROM tbl_name [WHERE where_condition ] [ORDER BY … ] [LIMIT row_count ] 例如:使用DELETE語句刪除數(shù)據(jù)庫mysql_test的表customers中客戶名 為“李四”的客戶信息。 delete from mysql_test.customers where cu_name="李四"; 修改數(shù)據(jù) 語法:UPDATE tbl_name SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]… [WHERE where_condition] [ORDER BY …] [LIMIT row_count] 例如:使用UPDATE語句將數(shù)據(jù)庫mysql_test的表customers中姓名為“ 張三”的客戶的地址更新為“武漢” UPDATE mssql_test.customers SET cust_address=‘武漢市’ WHERE cust_name=‘張三’; 五、數(shù)據(jù)查詢SELECT語句
例如:查詢數(shù)據(jù)庫mysql_sest的表customers中各個客戶的姓名、性別和地址信息 SELECT cust_name,cust_sex,cust_address FROM mysql_test.customers; 定義并使用列的別名:SELECT cust_name,cust_address AS 地址,cust_contact FROM mysql_test.customers; 替換查詢結果集中的數(shù)據(jù) SELECT CASE id WHEN 1 then "yf" when 2 then "cs" WHEN 3 THEN "yw" WHEN 4 THEN "jl" ELSE "qt" END AS NAME FROM tb_dept;
聚合函數(shù)通常是數(shù)據(jù)庫系統(tǒng)中一類系統(tǒng)(內置函數(shù)) *******************FROM子句與多表連接查詢********************** 交叉連接,又稱笛卡爾積
內連接:SELECT * FROM tb_student INNER JOIN tb_score ON tb_student.studentNo=tb_score.studentNo
外連接:
問答題:寫出在MySQL中,內連接的語法格式。
簡述左外連接和右外連接的區(qū)別。
where子句
判定范圍: 1、當查詢的過濾條件被限定在值的某個范圍時,可以使用關鍵字“BETWEEN”。 例如:SELECT * FROM mysql_test.customers ->WHERE cust_id BETWEEN 903 AND 912; 2、使用關鍵字“IN”可以指定一個值的枚舉表,該表中會列出所有可能的值 判定空值: is null ;is not null 子查詢—結合關鍵字“IN”使用的子查詢:主要用于判定一個給定值是否存在于子查詢的結果集中 子查詢—結合關鍵字“EXISTS”使用的子查詢:子查詢的結果集不為空,則返回TRUE,否則返回FALSE GROUP BY子句與分組數(shù)據(jù):
having 語句與實際有出入為了考試請按照書本上的來哪怕他錯了
ORDER BY子句:排序 例句:在數(shù)據(jù)庫mysql_test的表customers中依次按照客戶姓名和地址的降序方式輸出客戶的姓名和性別 SELECT cust_name,cust_sex FROM mysql_test.customers -> ORDER BY cust_name DESC,cust_address DESC;
LIMIT:使用LIMIT子句限制被SELECT語句返回的行數(shù)
六、視圖什么是視圖:
使用視圖的優(yōu)點
語法;CREATE VIEW view_name[(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
在數(shù)據(jù)庫mysql_test中創(chuàng)建視圖customers_view,要求該視圖包含客戶信息表customers中所有男客戶的信息,并且要求保證今后對該視圖數(shù)據(jù)的修改都必須符合客戶性別為男性這個條件 CREATE OR REPLACE VIEW mysql_test.customers_view AS SELECT*FROM mysql_test.customers WHERE cust_sex=‘M’ WITH CHECK OPTION; 使用DROP VIEW語句刪除視圖: DROP VIEW [IF EXISTS] view_name [,view_name]… [RESTRICT | CASCADE] 使用ALTER VIEW語句對已有視圖的定義(結構)進行修改 ALTER VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL]CHECK OPTION] 使用SHOW CREATE VIEW語句查看已有視圖的定義(結構) SHOW CREATE VIEW view_name 使用DELETE語句通過視圖刪除基本表的數(shù)據(jù): 示例:刪除視圖customers_view中姓名為“周明”的客戶信息 DELETE FROM mysql_test.customers_view -> WHERE cust_name=‘周明’ 在視圖customers_view中查找客戶id號為905的客戶姓名及其地址 |
|