免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

數(shù)據(jù)庫系統(tǒng)原理(第四章:SQL與關系數(shù)據(jù)庫基本操作 )

 悅光陰 2020-12-18

一、SQL概述

sql是結構化查詢語言(Structured Query Language,SQL)是專門用來與數(shù) 據(jù)庫通信的語言,它可以幫助用戶操作關系數(shù)據(jù)庫。

SQL的特點:

SQL不是某個特定數(shù)據(jù)庫供應商專有的語言; SQL簡單易學 ;SQL強大、靈活,可以進行非常復雜和高級的數(shù)據(jù)庫操作

SQL的組成:

  • 數(shù)據(jù)查詢
  • 數(shù)據(jù)定義語言(Data Definition Language,DDL)
  • 數(shù)據(jù)操縱(DML)
  • 數(shù)據(jù)控制(DCL)

*******************數(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擴展語言要素

常量:也稱字面值或標量值 

  • 字符串常量:用單引號或雙引號括起來的字符序列,分為ASCII字符串常量和Unicode字符串常量
  • 數(shù)值常量:整數(shù)常量、  浮點數(shù)常量
  • 十六進制常量:每對十六進制數(shù)字被轉換為一個字符,其最前面有一個字母“X”(或“x”)
  • 時間日期常量:用單引號將表示日期時間的字符串括起來而構成的 例如:’2018-06-05’
  • 位字段值
  • 布爾值:TRUE:1  ;FALSE: 0
  • NULL值

變量:

  • 用戶變量:用戶變量前常添加一個符號@,用于將 其與列名區(qū)分開
  • 系統(tǒng)變量:大多數(shù)系統(tǒng)變量應用于其他SQL語句中 時,必須在系統(tǒng)變量前添加兩個@

 

 

 表達式 表達式是常量、變量、列名、復雜計算、運算符和函數(shù)的組合。

  • 字符型表達式
  • 數(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;

  1. 字符集(character set):定義了字符以及字符的編碼。
  2. 字符序(collation):指定字符集的 校對規(guī)則。

查看數(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ù)類型:

  • 整型int
  • 浮點型double
  • 布爾型bool
  • 日期型date
  • 時間戳timestamp
  • 時間型time 定長
  • 字符類型char
  • 可變長字符varchar

更新表(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)建成單列索引和組合索引

  • 普通索引 INDEX或KEY
  • 唯一性索引 UNIQUE
  • 主鍵 PRIMARY KEY

索引的創(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);


2、語法項[CONSTRAINT[symbol]] UNIQUE [INDEX|KEY] [index_name] (index_col_name,…),
用于表示在創(chuàng)建新表的同時創(chuàng)建該表的唯一性索引;
3、語法項[CONSTRAINT[symbol]] FOREIGN KEY [index_name] (index_col_name,…),
用于表示在創(chuàng)建新表的同時創(chuàng)建該表的外鍵;

 索引的創(chuàng)建:使用ALTER TABLE語句創(chuàng)建

  • 1)語法項ADD {INDEX|KEY} [index_name](index_col_name,…), 用于表示在修改表的同時為該表添加索引;
  • 2)語法項ADD [CONSTRAINT [symbol]] PRIMARY KEY (index_col_name,…), 用于表示在創(chuàng)建新表的同時為該表添加主鍵; 
  • 3)語法項ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] (index_col_name,…), 用于表示在修改表的同時為該表添加唯一性索引;
  • 4)語法項ADD [CONSTRAINT [symbol]] FOREIGN KEY (index_col_name,…), 用于表示在創(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語句

  • 1)選用DROP PRIMARY KEY子句用于刪除表中的主鍵,由于一個表中只有 一個主鍵,其也是一個索引;
  • 2)選用DROP INDEX子句用于刪除各種類型的索引;
  • 3)選用DROP FOREIGN KEY子句用于刪除外鍵。

例如:使用ALTER TABLE語句刪除數(shù)據(jù)庫mysql_test中表customers的主鍵和索引 index_customers。

 

四、數(shù)據(jù)更新(數(shù)據(jù)操縱語言DML)

插入數(shù)據(jù) 

  • INSERT…VALUES語句
  • INSERT…SET語句
  • INSERT…SELECT語句

例如:

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 tbl1 CROSS JOIN tbl2;
  • SELECT * FROM tbl1,tbl2

內連接:SELECT   *  FROM tb_student INNER JOIN tb_score   ON tb_student.studentNo=tb_score.studentNo

  • 關于內連接的使用,可以將一個表與它本身進行連接,這種連接方式稱為自連接;
  • 關于內連接的使用,如若在ON子句的連接條件中使用運算符“=”,則此 連接方式為(等值連接)

外連接:

  • 左外連接:在FROM子句中使用關鍵字LEFT OUTER JOIN或LEFT JOIN
  • 右外連接:在FROM子句中使用關鍵字RIGHT OUTER JOIN或RIGHT JOIN

問答題:寫出在MySQL中,內連接的語法格式。

 

 

 

簡述左外連接和右外連接的區(qū)別。

  • 左外連接:也稱左連接。以左表為基表,在FROM子句中使用關鍵字“LEFT OUTER JOIN”或關鍵字“LEFT JOIN”來連接兩張表。
  • 右外連接:也稱右連接。以右表為基表,在FROM子句中使用關鍵字“RIGHT OUTER JOIN”或關鍵字“RIGHT JOIN”來連接兩張表。

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子句:HAVING where_condition(指定過濾條件)

 

 

 

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ù)

 

六、視圖

什么是視圖:

  • 視圖是數(shù)據(jù)庫中的一個對象,它是數(shù)據(jù)庫管理系統(tǒng)提供給用戶的以多種角度觀察數(shù)據(jù)庫中數(shù)據(jù)的一種重要機制。
  • 視圖不是數(shù)據(jù)庫中真實的表,而是一張?zhí)摂M表,其自身并不存儲數(shù)據(jù)。

使用視圖的優(yōu)點

  • 集中分散數(shù)據(jù)
  • 簡化查詢語句
  • 重用SQL語句
  • 保護數(shù)據(jù)安全
  • 共享所需數(shù)據(jù)
  • 更改數(shù)據(jù)格式


使用CREATE VIEW創(chuàng)建視圖

語法;CREATE VIEW view_name[(column_list)]  AS select_statement  [WITH [CASCADED | LOCAL] CHECK OPTION]

  • create or replace view的意思就是若數(shù)據(jù)庫中已經(jīng)存在這個名字的視圖的話,就替代它,若沒有則創(chuàng)建視圖;
  • create則不進行判斷,若數(shù)據(jù)庫中已經(jīng)存在的話,則報錯,說對象已存在;

在數(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的客戶姓名及其地址

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多