sql語句_自連線_外連線_左連線_子查詢_排序_分組
阿新 • • 發佈:2018-12-04
資料庫
sql語句
分為DDL,DCL,DLL
1),DDL,data define language: 新建一個數據庫
ceate建立 alter修改 drop刪
這三條語句,在下面幾個元件中,都可以用得到
資料庫分為下面幾個元件
a,資料庫,database
#如果之前已經存在,刪除它
drop DATABASE if exists 資料庫名;
建立一個數據庫
create database 資料庫名字;
#進入資料庫
use 資料庫名;
b,表 table create table 表名( 設定變數,和約束 一般變數分的型別分為 int 數字 varchar 字串型別 必須是一個介於 1 和 8,000 之間的數值 char 指定字元的長度 char(8),你輸入的字元小於8時, 它會再後面補空值。當你輸入 的字元大於指定的數時, 它會擷取超出的字元 datetime 日期加時間 date 日期 TEXT text儲存可變長度的非Unicode資料 tinyint 六大約束 主鍵約束 primamy key 一個表只有一個主鍵,且不能空值 唯一約束 unique 表示,一行資料中不能有相同的列值,一個表可以定義多個unique的約束 檢查約束 check 輸入一列或多列的值的範圍,通過邏輯表示式來判斷資料的有效性 外來鍵約束 foreign key (ID) references 表名(ID) 連線主表與從表,主表中的一個列,與另一個表中的資料相連線, 主 非空約束 not null 預設約束 default #字元編碼的更改 )DEFAULT CHARSET=utf8 c,檢視 view 是一個是虛表,只能是本使用者自身可以使用,基於sql的查詢建立 建立view: create view lishi as select sname from student,(select ...from) sd WHERE sname like "lishi"; d,儲存過程,(procedure) 一般用於供外部程式呼叫,相當於一個把資料封裝的概念,能夠起到對資料的保護安全的作用 能提交處理效率 自定義: 沒有返回值,out代表結果輸出,out可以有多個也就是說在引數 in代表 create procedure pro ([引數[in|out] 資料型別]) create procedure sp_search(in p_name varchar(10) begin set @varibale1 = concat('%',p_name,'%'); if p_name is null or p_name='' then select * from t_user;------------------------查詢所有 else select *from t_user where user_name like @varibale1;-----按條件查詢 end if; end; 呼叫方法: call sp_search('李'); 可以接收整個結果,也可以在引數中接收 e,觸發器 f,索引 index使用索引的前提是資料量龐大的表 建立索引的優點是,可以提高查詢效率, 當更新基本表時,自己自動修改索引 缺點是:當基本表,不斷地在更新,刪除,增加資料時,會提高維護索引的時間 建立新的索引: create index 索引名 on 表名() g,函式 主要是用於對資料欄位的處理,要有返回值,這是跟儲存過程的區別 呼叫方法是,直接select已經寫好的函式 create view lsview AS select sid,CONCAT(sname,'xxx') sname,sage+10 from student where sname like 'lishi'; concat(a,b)字串的連線 sage+10 +10也是一個簡單函式 avg 平均值 sum 求和 max 最大 min 最小 自定義函式:CREATE function funadd(age int,stand int) returns VARCHAR(20) BEGIN if age >= stand then--------------------這裡寫各種T-SQL語句 return 'old'; end; []代表可以有可無 可以不帶前提條件 呼叫方法 select 函式名 from..表名 Transcat-Sql語句 變數的宣告 控制語句 分支 迴圈 case when可以直接在select語句 %百分號,放兩邊%100% 結果表示模糊包含 放左邊%100 結果表示以100開頭 放右邊100% 結果表示以100結束 _下劃線,有幾個下劃線,表示結果後面可以跟幾個字元 2),DML,data manage language: 對資料本身的操作語句 增insert 刪delete 改updata 查select insert into 表名(列名) values('要加入的值'); insert into classes (cname) values('數學'); delete from 表名 條件 id為7的; delete from zsy where id=7; 刪除可以是沒有條件的,不用where,可以直接刪除整個表 update 表名 set 要改的列名裡面的外語 where 表裡面名字為 英語, update classes set cname='外語' where cname='英語';# select [distinct] 欄位1 as 別名, 函式(),欄位1+欄位2 ... from 表 (基本表,子查詢,檢視) 表別名 ( left |inner join ) 表2 on 表1.欄位 = 表2.欄位2... where 欄位 ( 關係 (any | all) | between ..and | like | in | ) and | or 條件2 order by 列1,列2 (asc | desc) group by 列1,列2 having 分組以後條件 select 查表----------------------- 單表查詢---- select * from 表名; 查表裡面所有資料 select name,id from student where id=12; 查表裡面所有id為12的資料,結果要顯示名字和id; select * from student where sname like '%lishi%'; 模糊查詢,student裡面sname帶有lishi的全都顯示到結果 select sum(sage) from student;#求總數 select avg(sage) from student;#平均值 select *from student order by sdate asc; #按sdate查詢出整個表的結果,然後進行升序 預設結果為升序排列 select *from student order by sdate desc;# #按sdate查詢出整個表的結果,然後進行降序 select scid,avg(sage) avg from student group by scid; #先按scid分組,再進行取其年齡平均數,把scid和sage顯示到結果裡面 select sid,sname from student where (sname like '李四%' and sid=2) or sid=9 order by sdate desc; 從student 查詢 id和name 條件是 名字裡面有包含 李四的和id為2的, 或者id為9的,以date的形式降序排列 -----------------多表查詢-------------------- 外連線------------ select cname,sname from student,classes; 查詢兩個表,兩個表之間用逗號隔開 select scid,sname,cname from student,classes where scid=cid; 查詢兩個表,條件是第一個表的id=第二個表的id; 還有取別名,如果取了別名的話,一定要使用別名 左連線 left join用來查詢左側表的全部記錄及右測表的連線欄位完全相同於左側表的記錄 select cname,count(scid) sum from classes left join student on student.scid=classes.cid group by cname; 查詢calsses 和student裡面的名字和所有id的,如果是左id=右id的話,把左邊名字都列出來, 右邊如果條件吻合的話也列出來,排序cname分幾個小組 Group By語句從英文的字面意義上理解就是“根據(by)一定的規則進行分組(Group)”。 它的作用是通過一定的規則將一個數據集劃分成若干個小的區域 --------------------自連線 樹形結構,存到二維表中 自己先複製一份, select sname,cname from category c1,category c2 where c1.pid=c2.cid; -----------------------子查詢-------------- 概念就是把查詢出來的結果,做為一張表來用,所以有時候select查詢語句會寫的很長 any跟all的區別 any: 大於的話,就是比最小值要大,大於的話,就是比最小值要小 all: 取出最大值 跟前者比較