日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL基础(一)

發布時間:2025/7/14 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL基础(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 經過這段時間對SQL的基礎學習,下面對自己的學習做個總結或者也可以說是個回顧吧!

我練習的是在oracle數據庫平臺上,并且安裝了PLSQL Developer工具。下面是我從小白開始一路學習的回顧:

首先這是PLSQL Developer的登陸界面:

? ? ?

SQL SELECT 查詢語法

基本查詢:

SELECT 列名稱 FROM 表名稱

條件查詢:

SELECT 列名稱 FROM 表名稱 WHERE  條件

條件排序查詢:

SELECT 列名稱 FROM 表名稱 WHERE 條件 ORDER BY

?

INSERT INTO ?插入語句

基本插入語句:

INSERT INTO 表名稱 VALUES (值1, 值2, 值3,. . .)

指定所需要插入數據的列:

INSERT INTO 表名稱(列1, 列2, 列3, . . . )VALUES (值1,值2,值3, . . .)

?

UPDATE 更新語句

基本更新語句:

UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值

更新某一行的若干列:

UPDATE 表名稱 SET 列1 = 值1, 列2 = 值2, 列3 = 值3,. . . WHERE 條件

?

DELETE 刪除語句

按條件刪除:

DELETE FROM 表名稱 WHERE 列名稱 =

刪除表的所有行:

DELETE FROM 表名稱

或者:

DELETE * FROM 表名稱;

?

默認情況下,我先是以管理員身份登陸,然后創建我自己練習的用戶(jim)

那么是怎么來創建我的用戶的呢?

CREATE USER 用戶名 IDENTIFIED BY 密碼
//
創建新用戶jim,密碼就是changeit CREATE USER jim IDENTIFIED BY changeit

創建好的用戶是什么功能都木有的,哪怕是登陸的權限也沒有,這時候我們就要給新用戶賦予一定的權限

給用戶賦予登陸的權限:

/*給用戶賦予登陸的權限*/ GRANT CONNECT TO jim;

這時候,用戶jim是可以登錄的,但是它還是沒有權限去操作數據庫,表這些對象,哪怕它自己建一個表的權利也沒有,

這時候我們再給他賦一個對象的權限,這樣他就可以創建表了:

/*給用戶賦予創建表等對象的權限*/ GRANT RESOURCE TO jim;

這時候我們jim用戶就有了基本的功能了,這時候我們在退出原來的用戶,用jim用戶即可登錄。

這里順平提下刪除用戶的方法:

/*那么對應得刪除用戶我們順便提下*/ DROP USER jim

一般情況下,這樣會報錯不刪除,出發jim用戶是空的,什么表也沒創建,

如果jim用戶創建表,我們可以在后面加casecode,表示把jim用戶下的所有資源全部刪除

/*如果jim用戶下有創建表,或者其他對象,這樣是刪除不了, 我們在后面加個casecode就可以*/ DROP USER jim CASECADE;

好了,趕緊用我們的新用戶來登陸吧. . . .?

我們先來創建一個叫作Persons的表:

IdLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing

對應的sql語句為:? ?

/*創建Persons表*/ CREATE TABLE Persons( Id number, LastName nvarchar2(20), FirstName nvarchar2(20), Address nvarchar2(20), City nvarchar2(20));

這樣一個空的表就創建成功了,但是里面的內容是空的,這時候我們可以往表中插入數據

完整的字段插入:INSET INTO 表名 VALUES(值1,值2,值3,. . .);
/*
往Persons表插入數據*/ INSERT INTO Persons VALUES(1,'Adams','John','Oxford Street','London'); INSERT INTO Persons VALUES(2,'Bush','George','Fifth Avenue','New York'); INSERT INTO Persons VALUES(3,'Carter','Tomas','Changan Street','Beijing');

這樣我們插入的是完整的數據,當然我們也可以插入部分字段的數據,

部分字段插入:INSERT INTO 表名(字段1,字段2,字段3. . .) VALUES (值1,值2,值3 . . . )
/*
也可以給表中的部分字段添加數據*/ INSERT INTO Persons(Id,LastName,Firstname,City) VALUES(1,'Jiang','Jim','Dalian');

?當然我們也可以修改表中的數據,比如我們修改FirstName為Jim的City為Wuyuan

UPDATE 表名 SET 字段1=新值 WHERE 字段1 = '某個值'
/*
更新表中的數據*/ UPDATE Persons SET City = 'Wuyuan' WHERE FirstName = 'Jim';

?再后來呢,我們可以刪除我們不需要的數據,注意,刪除數據需要特別小心

比如我們想刪除某一行,一定要用WHERE加個限定,不然就真的是刪除數據庫跑路了.........

現在刪除LastName = 'Jiang'這一行,我們可以這樣寫:

/*刪除某一行數據*/ DELETE FROM Persons WHERE LastName = 'Jiang' ;

當然,你真的要刪除所有,那就可以不用限定條件,直接把表中所有數據清空?

/*清空數據*/ DELETE FROM Persons;

如果你要斬草除根,把數據連同表結構也一起刪除,你可以這么干

/*章草除根,直接把表結構也刪除的話就可以這么干*/ DROP TABLE Persons;

好了,三個單詞一夜回到解放前,一無所有了 . . . . ?

In操作符

SELECT 字段名 FROM 表名稱 WHERE 字段 IN (值1,值2,值3,值4, . . .)

BETWEEN. . .AND. . .區間語法

SELECT 字段名 FROM 表名稱 WHERE 字段名 BETWEEN 值1 AND 值n

?

?下面我們來創建一個時間維度表,假設表的名稱為DIM_DATE

? ? ?D_ID? ? ?D_DATE ? ?? ? ? ? D_YEAR ??? ? ? ?D_QUARTER? ?D_MONTH? ? D_WEEK
20160723? ?2016/7/23? ? ? ? ? 2016? ? ? ? ? ? ?Q3? ? ? ?JULE? ? SATURDAY
--設計日期維度表 CREATE TABLE DIM_DATE( D_ID NUMBER(8) PRIMARY KEY, --20160723 D_DATE DATE, --2016/7/23 D_YEAR NUMBER, --2016 D_QUARTER CHAR(2), --Q3 D_MONTH NVARCHAR2(15), --JULE D_WEEK NVARCHAR2(15)); --SATURDAY

接下來我們可以往表中差數據,如果手工一條一條的插入數據,那將會要人命的,因此,我們可以寫一個存儲過程,可以從起始日期到結束日期

插入到數據表中,對對應的存儲過程如下:

--創建存儲過程,插入時間,從起止日期到結束日期 CREATE OR REPLACE PROCEDURE P_INSERTDATE(startDate NVARCHAR2,endDate nvarchar2)ASBEGIN MERGE INTO DIM_DATE t1USING (select to_number(to_char(to_date(startDate,'YYYY-MM-DD')+(rownum-1),'yyyymmdd')) t_date from dual connect by rownum<=(to_date(endDate,'YYYY-MM-DD')-to_date(startDate,'YYYY-MM-DD'))) temp_dateON(t1.d_id=temp_date.t_date)when matched then update set t1.d_date=to_date(temp_date.t_date,'YYYY-MM-DD'),t1.d_year=to_number(substr(to_char(temp_date.t_date),1,4)),t1.d_quarter='Q'||to_char(to_date(temp_date.t_date,'YYYY-MM-DD'),'Q'),t1.d_month=to_char(to_date(temp_date.t_date,'YYYY-MM-DD'),'MONTH'),t1.d_week=to_char(to_date(temp_date.t_date,'YYYY-MM-DD'),'DAY')when not matched then insert (t1.d_id,t1.d_date,t1.d_year,t1.d_quarter,t1.d_month,t1.d_week) values( temp_date.t_date,to_date(temp_date.t_date,'YYYY-MM-DD'),to_number(substr(to_char(temp_date.t_date),1,4)),'Q'||to_char(to_date(temp_date.t_date,'YYYY-MM-DD'),'Q'),to_char(to_date(temp_date.t_date,'YYYY-MM-DD'),'MONTH'),to_char(to_date(temp_date.t_date,'YYYY-MM-DD'),'DAY')); END;

其中注意的幾點,我們先要獲取某段時間,這時候我們可以這么寫,

比如獲取從2016年7月23日至2017年7月22日這段日期:

SELECT to_date('2016-07-23','YYYY-MM-DD')+ROWNUM-1 FROM DUAL CONNECT BY ROWNUM <= to_date('2017-07-23','YYYY-MM-DD')-to_date('2016-07-23','YYYY-MM-DD');

結果:

在利用merge into即可在我們的時間維度表進行更新和插入。

1.用一條語句查出每門課都大于80分的學生姓名

NAMESUBJECTSCORE
張三語文85
張三數學90
李四語文76
李四數學100
王五語文69
王五數學95
王五英語88

?

?

?

?

?

?

?

?

--創建學生成績表 CREATE TABLE SCORES( NAME VARCHAR2(10), SUBJECT VARCHAR2(10), SCORE NUMBER); --插入數據 INSERT INTO SCORES VALUES('張三','語文',85); INSERT INTO SCORES VALUES('張三','數學',90); INSERT INTO SCORES VALUES('李四','語文',76); INSERT INTO SCORES VALUES('李四','數學',100); INSERT INTO SCORES VALUES('王五','語文',69); INSERT INTO SCORES VALUES('王五','數學',95); INSERT INTO SCORES VALUES('王五','英語',88);

思路:先對學生按姓名進行分組(group by),然后過濾(having)

--用一條語句查出每門課都大于80分的學生姓名 SELECT t1.name FROM SCORES t1 GROUP BY T1.NAME HAVING MIN(t1.score)>80;

也可以這么寫,先把成績低于80的學生姓名查找出來,然后再篩選(not in)

--查出每門課都大于80分的學生姓名(2) WITH temp AS(SELECT DISTINCT t1.name FROM SCORES t1 WHERE t1.score<80) --先找出成績有低于80的學生姓名SELECT DISTINCT t1.name FROM SCORES t1 WHERE t1.name NOT IN(SELECT * FROM TEMP);

?2.對下表進行轉換

NAMESUBJECTSCORE
張三語文85
張三數學90
李四語文76
李四數學100
王五語文69
王五數學95
王五英語88
NAME語文數學英語
張三85900
李四761000
王五699588

?

?

?

?

SELECT t1.name,sum(decode('語文',t1.subject,t1.score)) ,sum(decode('數學',t1.subject,t1.score)),sum(decode('英語',t1.subject,t1.score))FROM SCORES t1 group by t1.name order by 1;



SELECT
t1.name,SUM(CASE WHEN t1.subject='語文' THEN t1.score ELSE 0 END),SUM(CASE WHEN t1.subject='數學' THEN t1.score ELSE 0 END),SUM(CASE WHEN t1.Subject='英語' THEN t1.score ELSE 0 END)FROM SCORES t1 group by t1.name; --進行表的轉換(pivot) SELECT * FROM (SELECT t1.name ,t1.subject,t1.score from SCORES t1 group by t1.name,t1.subject,t1.score)PIVOT(SUM(score) FOR subject IN('語文','數學','英語'));

?

轉載于:https://www.cnblogs.com/Jims2016/p/5678631.html

總結

以上是生活随笔為你收集整理的SQL基础(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一级黄色在线 | 成人av在线播放网站 | 久久av秘一区二区三区 | 欧美色啪 | 免费看h网站 | 激情综合区 | 欧美深夜福利 | 性爱动漫 | 国产做爰高潮呻吟视频 | 国内一区二区视频 | 欧美日韩中文字幕在线视频 | 亚洲性网站 | 久久久免费网站 | 午夜天堂精品久久久久 | 被灌满精子的波多野结衣 | 成人在线观看免费 | 无码人妻丰满熟妇区五十路 | 国产成人愉拍精品久久 | 国产一线二线在线观看 | 91在线网站 | 91黄色免费版 | 日本黄色片在线播放 | 视频久久精品 | www.欧美在线观看 | 少妇被又大又粗又爽毛片久久黑人 | 免费看黄在线 | 黄瓜视频在线播放 | 欧美大片a | 国产精品第七页 | 精品视频免费观看 | 亚洲午夜久久久久久久久久久 | 西西大胆午夜视频 | 国产成人精品一区二区三区福利 | 人人干人人模 | 久久久久性| 少妇粉嫩小泬喷水视频www | 日日摸日日添日日碰9学生露脸 | 国产成人啪精品午夜在线观看 | 黄色片a级片 | 五月天黄色网址 | 日韩中文一区二区 | 久久91精品国产91久久小草 | 乱lun合集小可的奶水 | 中文字幕无码精品亚洲资源网久久 | 免费人妻精品一区二区三区 | 成年人黄色 | 蜜桃臀一区二区三区 | 欧美性猛交xxxx乱大交蜜桃 | 亚洲精品国产精品乱码不卡 | 无码国精品一区二区免费蜜桃 | 精品婷婷色一区二区三区蜜桃 | 亚洲91色| 精品一区二区三区免费观看 | 亚洲精品乱码久久久久久蜜桃欧美 | 国产亚洲精品久久久久久777 | 91淫黄大片| 国产精品久久久久久久一区探花 | 午夜寻花| 国产精品麻豆成人av电影艾秋 | 华人永久免费 | 欧美日韩成人一区二区在线观看 | 一卡二卡三卡在线 | 一二三区视频 | 天天夜碰日日摸日日澡性色av | 青青草日本 | 久久久91精品 | 国产一区福利 | 性感美女毛片 | 91久久综合 | 色婷婷一区二区三区 | 麻豆视频免费观看 | av一区二区三区在线 | 日韩亚洲区 | 中文字幕精品视频在线 | 国产又大又黄的视频 | 中文字幕在线视频免费播放 | 色婷婷综合久久久中文字幕 | 国产成人av一区二区三区 | 欧美xxxx中国 | 日日久| 男人的天堂av网 | 国产婷| 日韩精品一区二区三区丰满 | 久久都是精品 | 夜夜操天天 | 国产毛片久久久久久 | 视色网站 | 日韩精品一区在线 | 91玉足脚交嫩脚丫在线播放 | 国产ts系列 | www.好了av.com| 亚洲天堂婷婷 | 亚洲av无码一区二区乱孑伦as | 韩国禁欲系高级感电影 | 亚洲成人欧美 | 怒海潜沙秦岭神树 | 一区二区不卡视频 | 国产乱强伦一区二区三区 | 欧美 亚洲 另类 激情 另类 |