MS SQLSERVER 各种乱七八糟
生活随笔
收集整理的這篇文章主要介紹了
MS SQLSERVER 各种乱七八糟
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
這個是看完了sql語法的一點個人練手,沒什么價值,權且當做記錄 select employee_id,dept_code,last_name,manager_id from l_employees where last_name like '%e%'--%代表任意字符串 order by dept_code,last_name;select distinct 選取不同的值 where manager_id is null or manager_id in (203, 206, 208); where last_name like '%e%' --%代表任意字符串order by manager_id desc; --默認asc升序排列 加desc降序排列 --order by 2; --使用列號來排序--SQL中 or比and高一個運算級create table SS(sno char(10) NOT NULL /*學號字段*/CONSTRAINT PK_sno PRIMARY KEY CLUSTERED/*主鍵約束*/CHECK (sno like '31300501[0-9][0-9]')/*檢查約束*/,sname char(8) NULL, /*姓名字段*/sex char(2) NULL, /*性別字段*/age int NULL, /*年齡字段*/dept varchar(20) NULL/*系別字段*/ ) --*********************************************** drop view tmd; --預防性刪除 create view tmd as select employee_id,first_name,last_name,dept_code --into sec04_sales_staff --創建表 from l_employees where dept_code = 'SAL';drop table sec04_sales_staff; select employee_id,first_name,last_name,dept_code into sec04_sales_staff --創建表 from l_employees where dept_code = 'SAL';create view temd as select * from l_employees where manager_id in (202, 206, 203); drop view temd;--****************************************************************delete from l_employees where LAST_NAME = 'JACKSON';update l_employees set employee_id = '2001',first_name = 'LAZY',last_name = 'JACKSON' where employee_id = null; insert into l_employees (employee_id, first_name, last_name, dept_code, manager_id) values ('211', 'LAZY', 'JACKSON', 'XXX', '209');update sec04_sales_staff set dept_code = 'XOX';--drop sequence sec_seq_lunch_id; 序列--*********************************************************************************************** --********************************************* --創建索引 create index ix_l_employees on l_employees (first_name, last_name) --*********************************************select employee_id,first_name,last_name,hire_date from l_employees where hire_date >= '1999/8/01'and hire_date <= '2010/12/31' order by last_name,hire_date,employee_id------------------------------------ --check約束條件 ------------------------------------ alter table l_employees drop constraint l_employees_min_employee_id;alter table l_employees drop constraint l_employees_min_hire_date;alter table l_employees add constraint l_employees_min_employee_id check (employee_id > '200');alter table l_employees add constraint l_employees_min_hire_date check (hire_date > '1900/01/01');---------------------------------------- --unique約束條件 唯一 ---------------------------------------- alter table l_employees add constraint unique_employee_id unique (employee_id);alter table l_employees drop constraint unique_employee_id;---------------------------------------- --not null 非空 ---------------------------------------- alter table l_employees add constraint nn_l_employees_employee_id check (employee_id is not null);alter table l_employees drop constraint nn_l_employees_employee_id;---------------------------------------- --primary key主鍵約束 ---------------------------------------- alter table l_employees add constraint pk_l_employees primary key (employee_id);alter table l_employees drop constraint pk_l_employees;--********************************************* --**設置RI(參照完整性) --*********************************************--**首先設定state_code為查找表(引用表/父表)sec808_tates的主鍵 alter table sec0808_states add constraint pk_sec0808_states primary key (state_code);--**設定state_code為子表state_外鍵 alter table sec0808_clients add constraint RI_sec0808_clients_state_code foreign key(state_code) references sec0808_states (state_code) on delete set null; --三種規則set null, cascade(刪除外鍵行) --************************************************** --**因為RI錯誤的修改語句 --************************************************** insert into sec0808_clients values (700, 'GAIL HAUSER', 'MA');update sec0808_clients set state_code = 'MA' where client_id = 200;update sec0808_states set state_code = 'MA' where state_code = 'OR';delete from sec0808_states where state_code = 'CA';alter table sec0808_clients drop constraint RI_sec0808_clients_state_code;--***************************************************************************** --**行函數 --***************************************************************************** select l_foods.*,price+price_increase as new_price into sec0902_foods from l_foods;select l_employees.*,first_name + ' ' + last_name as full_name,--字符串連接用+credit_limit + 10 as new_credit_limit into sec0902_employees from l_employees; select menu_item,description,price + price_increase as new_price from l_foods where menu_item < 15 order by menu_item;select employee_id,first_name + ' ' + last_name as full_name,--字符串連接用+credit_limit + 10 as new_credit_limit from l_employees order by employee_id;select menu_item,description,price + price_increase as new_price from l_foods where (price + price_increase) > 2 order by (price + price_increase);create view sec0905_step1_view as select menu_item,description,price + price_increase as new_price from l_foods; --*************************** select 10.0 / 3;--自動的數據類型轉換,與C相似select sqrt(3); --測試行函數 --************************************************************** --**常用行函數 --*************************** --**power(10, 3) 指數函數 --**sqrt(9, 2) 平方根 --**sign(-9) 符號函數 --**abs(-9) 絕對值 --**floor(-9.5) 小于等于此數的最大值 --**round(9.213423423, 2) 四舍五入到一個精度 --*************************************************************** select n,n % 3 --求余運算 from sec0908_test_number order by n;--**字符轉換函數 select ASCII('A'); --字符轉換ASCII碼 select char(97); --ASCLL碼轉字符 select lower('ASDASDasdsa'); --全部轉換為小寫 select upper('ASDasdasdASDASDasdasd'); --全部轉換為大寫 select str(12341231231256.78902323, 20, 3); --將數值型轉化為字符型--**去空格函數 select LTRIM(' ASDASD '); --去除左端空格 select RTRIM(' ASDASD '); --去除右端空格--**取字串函數 select left('ABCDEFGHIJK', 100); --從字符串左端截取長度為i的字符串 select right('abcdefghijk', 3); --從右端 select substring('ABCDEFGHIJK', 5, 3); --返回從左端第i號開始的長度為j的字符串--**字符串比較函數 select charindex('CE', 'ABCDEFG'); --查詢給定的字符串的位置,,沒有返回0,'ABCDEFG'處可以是列函數 select patindex('%A_D%', 'ADSFASDFASSDAFDFSAASD'); --可以使用通配符的查詢函數,此函數可用于CHAR、 VARCHAR 和TEXT 數據類型,下劃線的位置代表不必匹配--**字符串操作函數 select quotename('ASD', '<>'); --返回被特定括號(),<>,{},[]括起來的字符串,默認為[] select replace('ABCDEFGHI', 'ABC', '12345'); --替換字符串 select reverse('ASDASD'); --將給定的字符串顛倒順序 select replicate('ASD', 3); --返回重復多次的給定字符串 select space(5); --返回一定長度的空格 select stuff('ABCDEFGHI', 5, 10, 'ASD'); --用另一子串替換字符串指定位置、長度的子串。--**數據類型轉換函數 select cast(109.88 as int); select convert(int, 109.88); --**************************************************** -- convert 還可以用于改變日期的格式 --**************************************************** SELECT 'Default Date:' + CONVERT(Varchar(50), GETDATE(), 100) SELECT 'US Date:' + CONVERT(Varchar(50), GETDATE(), 101) SELECT 'ANSI Date:' + CONVERT(Varchar(50), GETDATE(), 103) SELECT 'UK/French Date:' +CONVERT (Varchar(50), GETDATE(), 103) SELECT 'German Date:' + CONVERT(Varchar(50), GETDATE(), 104) --****************************************************select len('ADSASD'); --字符串長度 select cast(1009.89 as decimal(10, 3)); --decimal(i, j)用于規定顯示數字的總長度和小數點后的精度 select convert(decimal(10, 3), 1009.89);--**日期函數select day(hire_date) as 日,month(hire_date) as 月,year(hire_date) as 年 from l_employees;select getdate(); --給出當前的日期 select dateadd(year,-1,getdate()); --指定的日期部分變化相應值之后的日期 select dateadd(day, 3, '1990-08-24'); --日期必須用''字符串表示 select datediff(month, '1990-12-10', '1990-09-10'); --兩個日期在指定的日期部分下的差值,有正負 select datename(month, '1990-08-24'); --以字符串形式返回指定部分的日期值 select datepart(day, '1990-08-24'); --以數值形式返回指定部分的日期 --**yy相當于year,mm相當于month,dd相當于day--******************************************* --**其他類型行函數 --******************************************* select user; --顯示當前的用戶名--********************************************************************************************** --**列函數(聚合函數) --********************************************************************************************** declare @MyNum int --用戶變量必須以@開頭 用set或者select語句可以給變量賦值,但是select賦值語句不能和檢索操作混用 set @MyNum = 144 select sqrt(@MyNum);select * from sys.messages; --sys.messages是系統視圖,出現標準錯誤時,錯誤是由數據庫引擎引發的。所有的標準錯誤代碼與消息都保存在sys.messages系統視圖中select 5/0; select * from master.dbo.sysmessages where error = @@error ; -- @@error是配置變量,用于記錄最后一次發生的錯誤SELECT alias, name, msglangid --msglangid 被非正式的定義為Microsoft Global Language Identifier,可以檢索出系統已經安裝、支持的語言 FROM sys.syslanguages;--****************************************************************************** create table sec11(col_1 int NULL, col_2 int NULL, ) go insert into sec11 values(1, 4) insert into sec11 values(NULL, 5) insert into sec11 values(2, 6) insert into sec11 values(3, NULL)--************************************************************************ --**一個簡單的事務,將null設定為0再做運算 --************************************************************************ begin transactionupdate sec11 set col_1 = 0 where col_1 is NULL;update sec11 set col_2 = 0 where col_2 is NULL;select sum(col_1)+sum(col_2) as columns_add_first,sum(col_1 + col_2) as rows_add_first from sec11;rollback transaction; --************************************************************************ --匯總 --************************************************************************ select manager_id,dept_code,count(employee_id) as number_of_employees,min(credit_limit) as minimunm_credit,max(credit_limit) as maximum_credit from l_employees where not (employee_id = 202) --having not(employee_id = 202) having子句與where子句類似,都是限制條件的,,但是having子句可以使用列函數而且可以對已經匯總的數據進行處理. group by manager_id,dept_code order by manager_id,dept_code;--************************************************************************* --內連接(inner join) --************************************************************************* select a.fruit,a.f_num.b.f_num,b.color from sec_fruits a,sec_colors b where a.f_num = b.f_num order by a.fruit;select a.fruit,a.f_num.b.f_num,b.color from sec_fruits ainner join sec_colors bon a.f_num = b.f_num order by a.fruit;--******************************************************************** --外連接(outer join) --******************************************************************** --**左外連接 select a.fruit,a.f_num.b.f_num,b.color from sec_fruits aleft outer join sec_colors bon a.f_num = b.f_num order by a.fruit; --**右外連接 select a.fruit,a.f_num.b.f_num,b.color from sec_fruits aright outer join sec_colors bon a.f_num = b.f_num order by a.fruit; --**全外連接 select a.fruit,a.f_num.b.f_num,b.color from sec_fruits afull outer join sec_colors bon a.f_num = b.f_num order by a.fruit; --**全外連接的另一種實現方法 select a.fruit,a.f_num.b.f_num,b.color from sec_fruits a,left outer join sec_colors bon a.f_num = b.f_num union --**union用于將兩個結果表連接起來 select a.fruit,a.f_num.b.f_num,b.color from sec_fruits a,right outer join sec_colors bon a.f_num = b.f_num--****************** --**union all與union類似,不過union all不負責數據的自動排序和去重 --**union語句中selec語句使用新列名必須在最開頭 --**union語句中使用order by必須寫在最后 --**union可以實現自動的數據類型轉換 --**可以通過添加null列和使用類型轉換函數實現兩個表的union連接--****************** --union應用 --****************** --1.利用union自動排序和去重判斷兩張表是否完全相同 --2.使用加一列的直接量來確定數據的來源 --3.給異常、警告和錯誤的標志附加信息 --4.將數據從一個列中分到兩個不同的列中 --5.將兩個函數應用的數據的不同部分 --******************************************************************--交集操作 intersect --交集 取出兩個表中相同的數據 與where a=b and c=d 等效 --差集操作 可以通過先外連接再選取null行的操作來實現--********************************************************************************* --**交叉操作 --********************************************************************************* --交叉操作就是 叉積(笛卡爾積) --結果表行數 = 初始表行數的總和 --結果表列數 = 初始表列數的乘積select a.*,b.* from sec_fruit a,sec_color b; --內連接源于交叉連接 交叉連接可以列出所有可能的組合--************************************************** --**if-then-else --************************************************** --Oracle中使用decode 和 case 語句進行判斷 --Access中使用iif進行判斷 --SQL sever使用caseselect description,case when price > 2.00 then 'EXPENSIVE ITEM'else ' 'end as mess --case必須有end結尾 from l_foods order by description;--********************************* --**子查詢 --********************************* --****in與exists的區別-- in 是把外表和內表作hash join,而exists是對外表作loop,每次loop再對內表進行查詢。 -- 絕對的認為exists比in效率高的說法是不準確的。這要看關聯表的數據量大小. -- 如果查詢的兩個表大小相當,那么用in和exists差別不大。 -- 如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in:
轉載于:https://my.oschina.net/atttx123/blog/77802
總結
以上是生活随笔為你收集整理的MS SQLSERVER 各种乱七八糟的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP autoload实践
- 下一篇: 梦到尿淋到头上是什么意思