Sql基礎(chǔ)語句詳解
SQL即結(jié)構(gòu)化查詢語言(Structured Query Language),是一種特殊目的的編程語言,是一種數(shù)據(jù)庫查詢和程序設(shè)計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng);同時也是數(shù)據(jù)庫腳本文件的擴展名。
1、SQL分類
SQL語句主要可以劃分以下3個類別:
1)DDL語句:數(shù)據(jù)定義語句,這些語句定義了不同的數(shù)據(jù)段、數(shù)據(jù)庫、表、列、索引等數(shù)據(jù)庫對象。常用的關(guān)鍵字主要包括creat、drop、alter等。
2)DML語句:數(shù)據(jù)操縱語句,用于添加、刪除、更新和查詢數(shù)據(jù)庫記錄,并檢查數(shù)據(jù)完整性。常用的語句關(guān)鍵字主要包括 inster、delete、update 和 select等。
3)DCL語句:數(shù)據(jù)控制語句,用于控制不同數(shù)據(jù)段直接的許可和訪問級別的語句。這些語句定義了數(shù)據(jù)庫、表、字段、用戶的訪問權(quán)限和安全級別。主要的語句關(guān)鍵字包括 grant、revoke等。
2、DDL語句
DDL是數(shù)據(jù)定義語句的縮寫。是對數(shù)據(jù)庫內(nèi)部的對象進(jìn)行創(chuàng)建、刪除、修改等操作的語言。它和DML語句的最大區(qū)別是DML只是對表內(nèi)部數(shù)據(jù)操作,而不涉及表的定義、結(jié)構(gòu)的修改,更不會涉及其他對象。DDL語句更多地由數(shù)據(jù)庫管理員(DBA)使用,開發(fā)人員一般很少使用。
1)創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE dbname
例如,創(chuàng)建數(shù)據(jù)庫test1,命令執(zhí)行如下:
create database test1 ;
如果需要查詢系統(tǒng)中都存在哪些數(shù)據(jù)庫,可以使用以下命令查看:
show databases ;
在系統(tǒng)中會存在4個由MySQL系統(tǒng)自動創(chuàng)建的數(shù)據(jù)庫,分別為:
information_schema : 主要存儲系統(tǒng)中的一些數(shù)據(jù)庫對象信息,比如用戶表信息、列信息、權(quán)限信息、字符集信息、分區(qū)信息等。
cluster : 存儲系統(tǒng)的集群信息。
mysql : 存儲系統(tǒng)的用戶權(quán)限信息。
test : 系統(tǒng)自動創(chuàng)建的測試數(shù)據(jù)庫,任何用戶都可以使用。
選擇要操作的數(shù)據(jù)庫:
USE dbname
例如,選擇數(shù)據(jù)庫test1 :
use test1 ;
查看test1數(shù)據(jù)庫中創(chuàng)建的所有數(shù)據(jù)表 :
show tables ;
2)刪除數(shù)據(jù)庫
刪除數(shù)據(jù)庫的語法,如下:
drop database dbname ;
例如,要刪除test1數(shù)據(jù)庫:
drop database test1 ;
3)創(chuàng)建表
在數(shù)據(jù)庫中創(chuàng)建一張表的基本語法如下:
CREATE TABLE tablename (
column_name_1 column_type_1 constraints ,
column_name_2 column_type_2 constraints ,
. . .
column_name_n column_type_n constraints )
其中 , column_name 是列的名字;column_type 是列的數(shù)據(jù)類型; constraints 是這個列的約束條件。
例如,創(chuàng)建一個名稱為emp的表。表中包括ename(姓名)、hiredate(雇傭日期)和sal(薪水)三個字段,字段類型分別為varchar(10)、date、int(2)
create table emp ( ename varchar(10) ,
hiredate date ,
sal decimal (10, 2) ,
deptno int(2) ) ;
表創(chuàng)建完畢后,如果需要查看一下表的定義,可以使用如下命令:
DESC tablename
例如,查看emp表:
desc emp ;
如果需要查看創(chuàng)建表的SQL語句,可以使用如下命令:
show create table emp \G ;
注:\G 選項的含義是使得記錄能夠按照字段豎向排列,以便更好地顯示內(nèi)容較長的記錄。
4)刪除表
表的刪除命令如下:
DROP TABLE tablename
例如,要刪除數(shù)據(jù)表emp:
drop table emp ;
5)修改表
修改表類型 ,語法如下:
ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST|AFTER col_name]
例如,修改表emp的ename字段定義,將 varchar(10)改為varchar(20):
alter tabke emp modify ename varchar(20);
增加表字段,語法如下:
ALTER TABLE tablename ADD[COLUMN] column_definition [FIRST|AFTER col_name]
例如,在表emp中新增加字段 age ,類型為 int(3):
alter table emp add column age int(3);
刪除表字段,語法如下:
ALTER TABLE tablename DROP [COLUMN] col_name
例如,將字段age刪除:
alter table emp drop column age ;
字段改名,語法如下:
ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name]
例如,將age改名為age1,同時修改字段類型為 int(4):
alter table emp change age age1 int(4) ;
修改字段排列順序:
前面介紹的字段增加和修改語句(ADD/CHANG/MODIFY)中,都有一個可選項 first | after column_name ,這個選項可以用來修改字段在表中的位置,ADD增減的新字段默認(rèn)是加載表的最后位置,而CHANGE/MODIFY默認(rèn)都不會改變字段的位置。
例如, 將新增的字段 birth date 加在 ename之后:
alter table emp add birth date after ename ;
修改 age 字段,將它放在最前面:
alter table emp modify age int(3) first ;
注意:CHANGE/FIRST|AFTER COLUMN 都屬于MySQL在標(biāo)準(zhǔn)SQL上的擴展,在其他數(shù)據(jù)庫上不一定適用。
更改表名,語法如下:
ALTER TABLE tablename RENAME [TO] new_tablename
例如,將表 emp 改名為 emp1:
alter table emp rename emp1 ;
3、DML語句
DML操作是指對數(shù)據(jù)庫中表記錄的操作,主要包括表記錄的插入(insert)、更新(update)、刪除(delete)和查詢(select),是開發(fā)人員日常使用最多的操作。
1)插入記錄
向表中插入記錄的基本語法如下:
INSERT INTO tablename (field1 , field2 ,. . . ,fieldn) VALUES(value1 , value2 , . . . ,valuen);
例如,向表 emp 中插入記錄:
insert into emp (ename, hiredate, sal, deptno) values ('zzx1', '2000-01-01', '2000', 1);
也可以不指定字段名稱,但是 values 后面的順序應(yīng)該和字段的排列順序一致:
insert into emp values('lisa', '2001-01-02', '3000', 2);
含可空字段、非空但是含有默認(rèn)值的字段、自增字段,可以不用再insert后的字段列表中出現(xiàn),values后面只寫對應(yīng)字段名稱的 value 。這些沒寫的字段可以自動設(shè)置為NULL、默認(rèn)值、自增的下一個數(shù)字。
例如:只對表中的ename和sal顯示插入值:
insert into emp (ename, sal) values('dony', '1000') ;
在MySQL中,insert語句可以一次性插入多條記錄。
2)更新記錄
表里的記錄值可以通過update命令進(jìn)行更改,語法如下:
UPDATE tablename SET field1 = value1,field2 = value2,. . .,fieldn = valuen [WHERE CONDITION]
例如,將表emp中ename為 "lisa"的sal從3000更改為4000:
update emp set sal=4000 whereename='lisa' ;
3) 刪除記錄
使用delete刪除記錄,語法如下:
DELETE FROM tablename [WHERE CONDITION]
例如,在emp中將ename為dony的記錄全部刪除:
delete from emp where ename='dony' ;
注意:不加where條件將會把表的所有記錄刪除,所以操作時一定小心。
4)查詢記錄
基本語法如下:
SELECT * FROM tablename [WHERE CONDITION]
例如,將表emp中的記錄全部查詢出來:
select * form emp ;