1.解鎖scott使用者
---這句話的目的是為了檢視我登入的執行個體
SELECT * FROM V$INSTANCE;
---v$開頭的動态性能試圖
---解鎖scott賬戶
SELECT * FROM DBA_USERS;
ALTER USER SCOTT IDENTIFIED BY SCOTT;
2.建立TBL_STUDENT表
CREATE TABLE TBL_STUDENT
(
STU_ID NUMBER(10),
STU_NAME VARCHAR2(20),
PHONE_NUMBER VARCHAR2(20)
)
3.給表中插入注釋
COMMENT ON TABLE TBL_STUDENT IS '學生基本資訊表';
COMMENT ON COLUMN TBL_STUDENT.STU_ID IS '學生編号';
COMMENT ON COLUMN TBL_STUDENT.STU_NAME IS '學生姓名';
COMMENT ON COLUMN TBL_STUDENT.PHONE_NUMBER IS '手機号碼';
4.表中插入資料
INSERT INTO STUDENT(STU_ID,STU_NAME,PHONE_NUMBER)
VALUES (1,'張三','18012341234');
INSERT INTO STUDENT(STU_ID,STU_NAME,PHONE_NUMBER)
VALUES (2,'李四','18012341234');
INSERT INTO STUDENT(STU_ID,STU_NAME,PHONE_NUMBER)
VALUES (3,'王五','18012341234');
COMMIT;
5.添加列
ALTER TABLE TBL_STUDENT ADD(STU_GENDER NUMBER(1));
6.添加性别:0表示男 1表示女
UPDATE TBL_STUDENT t SET t.STU_GENDER ='0'where t.stu_id='1';
7.表資料的删除
DELETE FROM TBL_STUDENT WHERE ID ='1';
8.清空表的兩種方式
No.1:DELETE:後面可以直接加條件 删除我所指定的資料,删除資料後 原有的資料塊不會被釋放 會産生高水位線問題 但delete支援復原 速度較慢
No.2:TRUNCATE:TRUNCATE後面不能加條件 是對資料的直接清空 速度較快 能夠對表空間得到釋放 但是turncate無法復原
DELETE FROM TBL_STUDENT;
TRUNCATE FROM TBL_STUDENT;
9.修改表中資料
UPDATE TBL_STUDENT T SET T.STU_NAME = '呵呵' WHERE T.STU_ID='1';
10.查詢表中的資料及部分用法
--查詢表中所有資料
SELECT * FROM TBL_STUDENT;
--查詢id在3到8之間的資料
SELECT * FROM TBL_STUDENT t WHERE t.STU_ID BETWEEN 3 AND 8;
--查詢性别為男的人數
SELECT COUNT(t.stu_id)FROM TBL_STUDENT t WHERE t.STU_GENDER = '0';
--把兩個表的結果都查詢出來 兩個結果集并起來
--UNION ON 和UNION 的差別:union 會對表中的資料進行排序而且會清除重複資料 較消耗性能
SELECT * FROM TBL_STUDENT UNION ALL SELECT * FROM TBL_STUDENT2;
SELECT * FROM TBL_STUDENT UNION SELECT * FROM TBL_STUDENT2;
11.查詢男女比例
--CASE WHEN 當滿足條件的時候
--THEN 要取得結果 END 表示case when 語句結束
SELECT (COUNT(CASE WHEN t.STU_GENDER = '0'
THEN t.STU_ID END)/COUNT(t.STU_ID))*100||'%' cnt_nan,
(COUNT(CASE WHEN t.STU_GENDER = '1'
THEN t.STU_ID END)/COUNT(t.STU_ID))*100||'%' cnt_nv
FROM TBL_STUDENT t;
查詢結果:
12.統計人數最多的姓氏 和 統計人數最少的姓氏
select z.xin,z.cnt_xin
from(
select substr(t.stu_name,0,1) xin,count(t.stu_id) cnt_xin
from tbl_student t
group by substr(t.stu_name,0,1)
)z
,
(
select max(t.cnt_xin) mx,min(t.cnt_xin) mi
from(
select substr(t.stu_name,0,1) xin,count(t.stu_id) cnt_xin
from tbl_student t
group by substr(t.stu_name,0,1))t
) z2
where z.cnt_xin = z2.mx or z.cnt_xin = z2.mi;
查詢結果:
左表為學生資訊表,右邊為姓氏統計最值表
未完待續。。。。。。