Ⅰ sql基礎語句
/*
語法:
select 查詢列表 from 表名
特點:
1.查詢列表可以是:表中的欄位、常量值、表達式、函數
2.查詢的結果是虛擬的表格
*/
-- 注意查詢之前,要打開指定的庫,use myemployees;
USE myemployees;
SELECT last_name FROM employees;
SELECT last_name,salary,email FROM employees;
SELECT*FROM employees;
-- 順序和表中的欄位一樣
SELECT 100;
SELECT 'JOIN'
SELECT 100*99;
SELECT VERSION();-- 8.0.11
/*
好處:
1.便於理解
2.如果要查詢的欄位有重名的情況,使用別名可以區分開
*/
SELECT 100*77 AS 結果 haha;
SELECT last_name AS 姓,first_name AS 名 FROM employees;
SELECT 100*77 結果 haha;
SELECT last_name 姓,first_name 名 FROM employees;
-- SELECT salary AS OUT put FROM employees;會報錯
-- 因為out是關鍵詞,所以,如果別名裡面有關鍵詞的,請加雙引號,或者單引號。
SELECT salary AS "OUT put" FROM employees;
SELECT DISTINCT department_id FROM employees;
/*
1.+號只有一個功能:運算符。
select 100+90; 這個做加法
2.SELECT NULL+10; --只要一方為NULL,則結果肯定是NULL。
*/
-- 錯誤❌:SELECT last_name+first_name AS 姓名 FROM employees;
SELECT CONCAT(last_name,first_name) AS 姓名 FROM employees;
DESC departments;
SELECT * FROM departments;
SELECT DISTINCT job_id FROM employees;
-- commission_pct有滲扮飢些值叢返是NULL
-- 因為NULL和誰拼接都是NULL
-- 所以下面的結果可能為NULL
SELECT CONCAT(employee_id,',',first_name,',',last_name,",",commission_pct) AS "OUT_PUT" FROM employees;
SELECT IFNULL(commission_pct,0) AS 獎金率,commission_pct FROM employees;
-- 上面題的做法:
SELECT CONCAT(employee_id,',',first_name,',',last_name,",",IFNULL(commission_pct,0)) AS "OUT_PUT" FROM employees;
/*
語法:
select 查詢列表 from 表名 where 篩選條件;
查缺談詢列表可以是:表中的欄位、常量值、表達式、函數
分類:
一。按條件表達式篩選
條件運算符:> < = !=或者<> >= <=
二。按邏輯表達式篩選
邏輯運算符:z
作用:連接條件表達式
&& || ! 或者 and or not
三。模糊查詢
like
BETWEEN AND
in
is null 或者 is not null
*/
SELECT * FROM employees WHERE salary>12000;
SELECT employee_id,department_id FROM employees WHERE department_id<>90;
SELECT last_name,salary,commission_pct
FROM employees
WHERE salary>=10000 AND salary<=20000;
SELECT * FROM employees WHERE department_id<90 or department_id >110 or salary>15000;
-- 或者寫成
SELECT * FROM employees WHERE NOt(department_id>=90 AND department_id <=110) or salary>15000;
/*like 特點:
一般和通配符搭配使用,
通配符
% :任意多個字元,包含0個字元
_ :佔一個字元
*/
-- %代表通配符
SELECT * FROM employees WHERE last_name LIKE '%a%'
SELECT last_name,salary FROM employees WHERE last_name LIKE '__n_l%'
-- 轉義字元
SELECT last_name FROM employees WHERE last_name LIKE ' _%'
-- 或者 告訴系統 %' ESCAPE '$'
/*
1.使用between and 可以提高語句簡潔度
2.包好臨界值
3.前小後大,不能顛倒順序
*/
SELECT * FROM employees WHERE employee_id>=100 AND employee_id<=120;
-- 或者
SELECT * FROM employees WHERE employee_id BETWEEN 100 AND 120;
/*
含義:判斷某欄位的值是否屬於in列表中的某一項
特點:
1.in 比 or 簡潔
2.in列表的值類型必須是相同的或者兼容的
3.in列表的值不能使用通配符
*/
SELECT last_name,job_id FROM employees WHERE job_id='IT_PROG' or job_id='AD_PRES' or job_id='AD_VP'
-- 或者
SELECT last_name,job_id FROM employees WHERE job_id IN('IT_PROG' , 'AD_PRES' ,'AD_VP');
/*
=或者<>不能用於判斷null值,所以只能用 is null和 is not null
*/
SELECT last_name,commission_pct FROM employees WHERE commission_pct is null;
SELECT last_name,commission_pct FROM employees WHERE commission_pct is not null;
-- 安全等於作用:判斷是否等於,包括null,如果等於返回true。可讀性較低
-- is null :僅僅判斷null值,可讀性較高。
-- 直接寫=是不行的
SELECT last_name,commission_pct FROM employees WHERE commission_pct <=> null;
SELECT * FROM employees WHERE salary <=> 12000;
-- 注意這個IFNULL
SELECT last_name,department_id,salary 12 (1+IFNULL(commission_pct,0))
as 年薪
FROM employees
WHERE employee_id=176;
SELECT salary,last_name FROM employees WHERE commission_pct IS NULL AND salary<18000;
SELECT * FROM employees WHERE job_id<>'IT' OR salary=12000;
DESC departments;
SELECT DISTINCT location_id FROM departments;
SELECT * FROM employees WHERE commission_pct like '%%' and last_name like '%%'-- commission_pct有欄位有null,and之後就是null了
Ⅱ sql 如何區分字元常量和日期常量
1.用單引號括起來的都是字元型.
2.日期型可以理解為特殊的字元型,特殊的地方就是它可以被資料庫引擎隱式的轉換成可識別的日期型.也就是說,只有符合一定格式的字元串才可以被轉換為日期型.至於到底哪些格式可被資料庫引擎轉換成日期型,在聯機幫助里有詳細的說明.
Ⅲ pl-sql中select * from al 這個al是什麼
Dual簡單的說就是一個空表,Oracle提供的最小的工作表,只有一行一列,具有某些特殊功用。常用來通過select語句計算常數表達式。
特性:
1、Oracle提供的最小的表,不論進行何種操作(不要刪除記錄),它都只有一條記錄——'X'。
例如:執行select * from al,裡面只有一條記錄;執行insert into al values('Y')後,再次查詢al表,仍然顯示一條記錄。
2、是sys用戶下的一張內部表,所有用戶都可以使用DUAL名稱訪問,無論什麼時候這個表總是存在
例如:執行一個查看當前日期的語句 select sysdate from al,這條語句在放在放在任何一個oracle資料庫當中都不會報錯,所以一般做一些特定查詢的時候用這個表是最穩妥的。
(3)sqlselect常量擴展閱讀:
用途
1、select計算常量表達式、偽列等值
oracle內部處理使它只返回一行數據,而使用其它表時可能返回多個數據行。
2、查看當前用戶
select user from al;
select count(*) from al;
3、用做計算器
select 7*9*10-10 from al;
4、調用系統函數
(1)獲得當前系統時間
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from al;
(2)獲得主機名
select sys_context('userenv','terminal') from al;
(3)獲得當前locale
select sys_context('userenv','language') from al;
(4)獲得一個隨機數
select DBMS_RANDOM.random from al;
5、查看序列值
(1)創建序列aaa 以1開始,每次加1
create sequence aaa increment by 1 start with 1;
(2)獲得序列aaa 的下一個序列值
select aaa.nextval from al;
(3)獲得序列aaa 的當前序列值
select aaa.currval from al;
Ⅳ sql語句怎麼逐條讀取一個表中的數據
用「游標」即可,語法如下:
selectafromtable
openc1
while1=1begin
fetchainto@a1//@a1是變數,這句作用是每一次都把每一行的a賦給變數@a1
if@@sqlcode=2begin//游標結束
break
end
.......//你的邏輯
end
1,INSERTINTOSELECT語句
語句形式為:InsertintoTable2(field1,field2,...)selectvalue1,value2,...fromTable1
要求目標表Table2必須存在,由於目標表Table2已經存在,所以除了插入源表Table1的欄位外,還可以插入常量。
2,SELECTINTOFROM語句
語句形式為:SELECTvale1,value2intoTable2fromTable1
要求目標表Table2不存在,因為在插入時會自動創建表Table2,並將Table1中指定欄位數據復制到Table2中。
Ⅳ sql 存儲過程使用定義的常量
DECLARE@aINT
SET@a=1
while@a<=@nCOUNT
begin
selecttop1*from
(SELECTTOP(@a)*=@HuoDongId)asa
orderbya.nRoundDESC
set@a=@a+1
end
Ⅵ sql如何將一個查詢變成常量
基本的查詢語句為select ID,name from TableA
select ID,name,新增的列名=(可以上查詢語句) from TableA
將你所需要設置的常量放在新增的列名上即可
QL Server查詢結果集中的常量通常不作為單獨的列在結果集中指定,下面就讓我們了解一下SQL Server查詢結果集中的常量處理問題。
SQL Server查詢結果集中的常量
常量通常不作為單獨的列在結果集中指定。對於應用程序本身而言,與要求伺服器將常量值合並到跨網路返回的每一個結果集的行中相比,在顯示結果時將常量值內置於結果中更為有效。
Ⅶ sql如何插入一個常數呢
你好!
用變數與常量插入表而不是插入數據集應該用Values
INSERT
INTO
stumes
(
stu_id,
stu_name,
stu_grade
)
Values(@stu1,
@stu2,
'2008')
如果是結果集寫成這樣:
INSERT
INTO
stumes
(
stu_id,
stu_name,
stu_grade
)
Select
表達式1
as
stu_id,表達式2
as
stu_name,'2008'
as
stu_grade
from
table
被插入表的欄位名與結果集的欄位名一樣比較好,可有效避免出錯。
如有疑問,請追問。