日韩性视频-久久久蜜桃-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基础(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日本αv | 欧美日本在线看 | 91在线观看成人 | 久久亚洲av无码西西人体 | 男人的天堂av网站 | 日韩精品在线一区二区三区 | 小明看国产 | 欧美αv | 亚洲一卡二卡 | 欧美88av| 色偷偷欧美 | 就要日就要操 | 可以免费看毛片的网站 | 欧美视频在线一区二区三区 | av色资源 | caoporn超碰97 | 最近最经典中文mv字幕 | 伊人黄网 | 性一交一乱一伧国产女士spa | 男男受被啪到高潮自述 | 男女性生活视频网站 | 亚洲三级电影网站 | 国产成人精品免高潮费视频 | 毛片在线视频观看 | 曰本女人与公拘交酡 | 免费污片在线观看 | 三级网站在线免费观看 | 亚洲日本精品视频 | 中文字幕在线观看免费视频 | 我不卡一区二区 | 亚洲女人av| 中文字幕一区二区久久人妻 | 日日干夜夜操 | 日韩精品色哟哟 | 精品免费国产一区二区三区 | 国产精品永久在线观看 | 强行糟蹋人妻hd中文 | 美女精品在线 | 涩涩成人 | 一本一道久久a久久 | 波多野吉衣伦理片 | 三级免费观看 | 欧洲亚洲天堂 | 夜夜小视频| 午夜在线精品 | 香蕉亚洲 | 色狠av| 国产精品人成在线观看免费 | 嫩草影院懂你的 | 色窝窝无码一区二区三区 | 久久亚洲精品视频 | 禁网站在线观看免费视频 | 久久夜精| 日韩中文字幕亚洲 | 精品人妻一区二区三区久久 | 高潮毛片无遮挡 | 天堂网成人 | 一级黄av| 亚洲天堂欧美在线 | 吞精囗交69激情欧美 | 欧美极品少妇xxxxⅹ猛交 | 麻豆精品视频 | 少妇激情在线 | 日韩理论在线 | 亚洲午夜视频在线观看 | 奇米影视在线观看 | 男女aa视频| 欧美成人影音 | 黄色国产片 | 亚洲欧美日韩中文字幕在线观看 | 亚洲人xxx日本人18 | 中国久久 | 妞妞影视 | 国产婷婷色一区二区三区在线 | 国产精品久久久久久av | 在线国产精品视频 | 天天爽夜夜爽人人爽 | 亚洲AV不卡无码一区二区三区 | 国产精品一级片 | 自拍 偷拍 欧美 | 欧美激情综合色综合啪啪五月 | 奇米影视第4色 | 久久狠狠干 | 女人被男人躁得好爽免费视频 | 免费男女视频 | 性色av网址 | 国产精品久久久久三级无码 | 亚洲国产麻豆 | 一级aa毛片| 天天干天天干天天操 | 五月婷婷色综合 | 日韩乱码人妻无码中文字幕 | 色wwwwww| 波多野结衣网址 | 国产精品久久av无码一区二区 | 久久精品这里有 | 亚洲砖区免费 | 亚洲天堂91| 大陆一级黄色片 |