1. 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了
2. 零基礎學sql要多久
入門需要一個月。
結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統。
結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式。
介紹:
SQL的核心部分相當於關系代數,但又具有關系代數所沒有的許多特點,如聚集、資料庫更新等。它是一個綜合的、通用的、功能極強的關系資料庫語言。其特點是:
1、數據描述、操縱、控制等功能一體化。
2、兩種使用方式,統一的語法結構。SQL有兩種使用方式。一是聯機交互使用,這種方式下的SQL實際上是作為自含型語言使用的。
3. T-SQL的基本語法
一:insert語句
into 關鍵字是可選的
values關鍵字前面的()是可選的,這里是要接收數據的列
values後面,有兩種方式提供值
1:顯式的給出值 2:從select語句中導出值
insert語句注意幾點
1:不要理標志列,系統會給你插入的
2:給出實際的值,如果沒有,那就null
3:給出默認的值,default關鍵字,告訴資料庫取默認值
insert into ... select
什麼時候會這么用,當成批的數據來自
1:資料庫中的另一個表
2:同一台伺服器完全不同的資料庫
3:另一個SQLSERVER的資料庫
4:來自同一個表中的數據
說實在的2和3我從來沒用過
好,看一個例子
declare @mytable table
(
id int,
sortid int
);
insert into @mytable (id,sortid) select id,classid from proct;
select * from @mytable;
注意我定義了一個表的對象
每一句之間是用分號隔開的
(id,sortid) 是可以忽略的
二:update語句
看例子
update e set e.flag = 'm' from employee e join contact ce on e.id = ce.employeeid where ce.name = 'jo'
這里用到了join子句,當然是可以用的
如果修改不止一列 只要加一個逗號
set num = num * 1.2當然可以寫表達式
三:delete語句
delete from actors from actors a left join film f on a.filmid = f.filmid where f.filmid is null
outer連接將在沒有匹配的一端返回null,
這里也就是film表沒有匹配的行是null
注意 is null 的寫法
四: select語句
這里還是不說了,還是多說說子句吧
五:where子句
1:
= > < >= <= <> != !> !<
其中<> 與 !=都是不相等的意思
!>與!<不怎麼常見,但仔細想想也沒什麼用處
2:
and or not
如果一個where子句中同時出現這三個操作符
最先評估not 然後是and 然後是or
3:
between 例子 between 1 and 5 這個就不多說了
4:
like 例子:like "xland%"
%和_是通配符
%代表零個或多個任意字元
_表示單個任意字元
把字元包括在方括弧中
[a-c]表示a b c都可行
[ab]表示a或b
^與not表示下一個字元將被排除掉
5:
in 例子 in ( 1,2,3) 這個也不多說了
六:order by子句
order by由於比較常用 我這里就不多說了
1:order by username 是可以識別中文的(sql先把中文轉換成拼音再進行排序)
2:可以對 查詢到的表中的任何列 進行排序 無論該列是否包含在select列表中
3:基於多個列的order by
例如:order by addtime,id
先按時間排序,再在這個基礎上根據id排序,你也看到了,性能是有很大幅度的降低的
七:distinct關鍵字
select count(distinct column) from table
檢索某一列不重復的記錄數
八:group by 聚集函數 和 having子句
先看例子:
select orderid sum(orderMoney) from sales where orderid between 3 and 123 group by orderid
注意這里的orderid在表裡是有可能重復的
這個語句的作用是檢索出orderid從3到123的記錄,
然後在這個記錄集合上 以orderid分組
把orderid相同的數據分到一組 (這一組就是最終結果的一條記錄)
然後通過sum函數把各組的orderMoney數據相加,
結果是最終結果的第二個欄位
我發現用group by子句基本上都是和聚集函數一起用的
舉幾個聚集函數的例子
sum 求和
avg求平均數
min/max求最大和最小值
count(表達式|*)獲取一個查詢中的行數
只說說count吧:
count(coloum)如果這一列有null,那麼這些null的行將不會計算在內
count(*)將得到表裡的所有行的數目
聚集函數不一定非和group by一起使用不可
(另外avg基本上都是和group by一起使用的)
having子句是在組上放置條件的
看例子
select orderid sum(orderMoney) from sales where orderid between 3 and 123 group by orderid having sum(orderMoney)>5
group by得到了一個記錄的集合
然後通過having子句,再在這個集合上做篩選
4. 資料庫基礎篇(二)—— SQL之數據查詢
接下來,我們將使用員工相關的四張樣本數據表,來學習SQL,建議你在學習過程中多動手練習,理解才會更深刻。表和欄位含義,如下圖:
如何利用SQL語句來操作以上數據呢?我們必須將樣本數據導入MySQL客戶端(如:Navicat)中。可以在客戶端操作數據,或者在終端窗口。工作中經常在客戶端操作,所以本文所有SQL語句將在Navicat中學習。
首先將sql腳本保存到桌面(獲取方式:關注"Python之每日一課"公眾號,後來回復"sql基礎數據",即可。),導入SQL腳本的具體操作流程如下:
現在數據准備完成。這里是導入sql腳本;導出同理,選擇」轉儲SQL「文件。當然了,Navicat也支持將當前表或查詢結果導出Excel、CSV等文件類型。
下面可以寫SQL語句了(每個sql腳本可以保存,下次直接使用),如下:
類似於Python中 :print(要列印的東西)
①通過select查詢完的結果 ,是一個虛擬的表格,不是真實存在
② 要查詢的東西 可以是常量值、表達式、欄位、也可以是函數
補充:可以給欄位起別名,好處是提高可讀性,更方便理解;多表連接時,區分欄位。用AS 或 空格來實現。如下:
2、 條件查詢
條件查詢:根據條件過濾原始表的數據,查詢到想要的數據
1)語法
2)分類
①條件表達式
②邏輯表達式
③模糊查詢
⭐ 注意:where 一定要放到 from 後面。NULL 不是假,也不是真,而是"空";任何運算符,判斷符碰到NULL,都得NULL;NULL的判斷只能用is null,is not null;NULL 影響查詢速度,一般避免使值為NULL。exists查詢可以與in型子查詢互換,它們之間區別以後語句優化時會詳細講解。
3、 排序查詢
1)語法
2)舉栗
⭐ 注意:order by 一定要放到 語句最後(limit前面)
4、分組查詢
1)語法
2)特點
①可以按單個欄位分組
②和分組函數一同查詢的欄位最好是分組後的欄位
③分組篩選(where 和 having區別)
④可以按多個欄位分組,欄位之間用逗號隔開
⑤可以支持排序
⑥having後可以支持別名
3)舉栗
⭐ 注意:關鍵字順序是where —>group by—>having—>order by—>limit( having不能單獨使用,需結合group by ,表示對分組後的結果進行篩選;而 group by 必須結合分組聚合函數一起使用 ,比如:count()、max()等)
5、 常見函數
1)單行函數
2)分組函數
3)分組函數特點
①以上五個分組函數都忽略null值,除了count(*)
②sum和avg一般處理數值型,max、min、count可以處理任何數據類型
③都可以搭配distinct使用,用於統計去重後的結果
④count的參數可以支持:欄位、*、常量值,一般放1
6、連接查詢(多表查詢)
單個表不能滿足需求時,需要結合多張表,去除有關聯的數據。這時就需要用連接查詢,連接查詢有三種,通常join使用的最多。
①等值連接的結果 = 多個表的交集
②多個表不分主次,沒有順序要求
③一般為表起別名,提高閱讀性和性能
①語法
②好處
語句上,連接條件和篩選條件實現了分離,簡潔。
⭐ 注意:左右連接可互換 A left join B 等價於B right join A;內連接是左</pre>
右連接的交集;mysql沒有外連接。
自連接相當於等值連接,但是等值連接涉及多個表,而自連接僅僅是它自己。如下:在員工信息表裡,查詢員工名和直接上級的名。
7、子查詢
一條查詢語句中又嵌套了另一條完整的select語句,其中被嵌套的select語句,稱為子查詢或內查詢。在外面的查詢語句,稱為主查詢或外查詢。
①子查詢都放在小括弧內
②子查詢可以放在from後面、select後面、where後面、having後面,但一般放在條件的右側
③子查詢優先於主查詢執行,主查詢使用了子查詢的執行結果
④子查詢根據查詢結果的行數不同分為以下兩類:
2)舉栗
8、分頁查詢 (可選)
實際web開發中,當顯示的數據,一頁顯示不完時,需要分頁提交sql請求。
2)特點
①起始條目索引默認從0開始
②limit子句放在查詢語句的最後
③公式:select * from 表 limit (page-1)*sizePerPage,
3)舉栗
9、union聯合查詢
union用於把涉及多個表的SELECT語句的結果組合到一個結果集合中。適用於查詢條件較多,多個表之間沒有連接關系的場景。</pre>
2)特點
①多條查詢語句的查詢的列數必須是一致的
②多條查詢語句的查詢的列的類型幾乎相同
③union 代表去重,union all 代表不去重
3)舉栗
UNION 和 UNION ALL 運行結果的區別如下:
⭐ 注意:在多個 SELECT 語句中,第一個 SELECT 語句中被使用的欄位名稱將被用於結果的欄位名稱。當使用 UNION 時,MySQL 會把結果集中重復的記錄刪掉,而使用 UNION ALL ,MySQL 會把所有的記錄返回,且效率高於 UNION
好,今天學習到這里。工作中用的最多就是查詢。如果能消化本文涉及到的所有內容,大概能解決80%的工作需求。本文更多的是原理介紹,例子不多,只有先知道是什麼,才能知道怎麼學。那麼,接下來最重要的是要多練習實踐。因為實際的業務場景要復雜很多,給大家推薦兩個刷題的網站,力扣和牛客網,裡面有大量的sql面試題。能進一步提高我們sql的水平。這篇文章主要是SQL的常用查詢。明天繼續學習SQL的DML增刪改。一起加油!
5. 誰能給我介紹下sql 中的一些基本語法有哪些是怎麼使用的包括增珊改查
sql最基本的操作就是增刪改查詢
一、增(INSERT向資料庫插入一條記錄)
INSERT語句是用來向表中輸入新的數據。
INSERT語句的基本語法:
INSERT INTO 表名(列名1,列名2,列名3……)
VALUES('值1,'值2','值3'……)
例子:
INSERT INTO muser(id,name,pwd)
VALUES('1','admin','admin')
注意:列的個數必須和VALUES子句中給出的值的個數相同;數據類型必須和類的數據類型對應。
二、刪(DELETE從表中刪除數據)
DELETE語句用來刪除數據,可以一次刪除一行,也可以刪除多行。
DELETE語句的基本語法:
DELETE FROM 表名 WHERE 條件
例子:
DELETE FROM muser WHERE id='1' and pwd='admin'
三、改(UPDATE修改表中的數據)
UPDATE語句用來修改已經存在的數據,UPDATE可影響一行也可以影響多行,甚至可以修改全部的數據。
UPDATE語句的基本語法:
UPDATE 表名 SET
列名='需要修改成為的數據'
WHERE 修改條件
例子:
UPDATE muser SET
pwd='admin888'
WHERE name='admin' AND pwd='admin'
四、查(使用SELECT查詢資料庫)
SELECT語句主要用來檢索數據
SELECT語句的基本語法:
SELECT 列名
FROM 表名
WHERE 檢索的條件
例子:
SELECT * FROM news WHERE class='國內新聞'
在列名中使用(*)表示從FROM表中指定的返回所有列。
6. sql增刪改查基本語法
sql增刪改查基本語法如下:
1、「INSERTINTO」語句,用於向表格中增加新的行。
2、「DELETE」語句,用於刪除表中的行。
3、「Update」語句,用於修改表中的數據。
4、「SELECT」語句,用於從表中選取數據。
sql語言特點:
SQL可以獨立完成資料庫生命周期中的全部活動,包括定義關系模式、錄入數據、建立資料庫、查詢、更新、維護、資料庫重構、資料庫安全性控制等一系列操作,這就為資料庫應用系統開發提供了良好的環境,在資料庫投入運行後,還可根據需要隨時逐步修改模式,且不影響資料庫的運行,從而使系統具有良好的可擴充性。
7. SQL基礎教程的內容簡介
本書是一本SQL的入門書,介紹如何使用最常用的SQL語言維護和查詢資料庫信息。書中介紹了各種DBMS,關系模型理論,SQL語法,從表中檢索數據,操作符和函數,匯總和分組數據,聯結,子查詢,集合操作,創建、更改和刪除表,索引,視圖,事務和SQL技巧等。本書比較了各種DBMS中的SQL實現,並給出大量實例代碼及經驗技巧。
本書適合SQL初學者,同時也可作為資料庫應用開發人員和最終用戶的參考書。
8. 要去一家公司做軟體實施,朋友要我先學會基本的oarcle寫sql語句,請問
第一SQL基本語法
插入語法 insert into table ..這個最簡單
更新語法 update table set ..這里需要學會多表聯查更新
查詢語法 select * from table ..這個比較復雜,需要學會單表和多表聯查,左鏈接(left join),當然最好還能理解where條件里 如何使用exists等實用語句,只知道聚合group by,排序order by。
條件允許的話,看一下存儲過程(其實存儲過程就是 sql中的函數,大致記得格式就可以了,別人怎麼寫,你也怎麼寫),以及存儲過程的好處(好處是因為是建立在資料庫層的,很多處理要比你應用層要快,不知道這樣說你能理解不。。)
第二資料庫實用知識
oracle方面 要知道如何大批量導出數據和導入數據,理解行級鎖和頁級鎖,以及事務的概念
在程序使用時候,盡量減少使用大事務(因為要耗掉很多鎖locks),等等常用知識
入門的話,基本這點就夠用了,軟體的話 plsql就可以了,簡單易用