資料庫介紹--認識簡單的SQL語句

爪哇島的流浪漢發表於2018-07-15

1、資料操縱語言DML
實現對錶內容(資料)的操作
insert/update/delete語句進行操作,需要進行commit
語句才能確認提交。
注意:sqplus預設是自動提交,若不是自動提交那麼
要手動提交(使用commit語句)
1)插入資料insert
寫法一:插入全部欄位
insert into table_name values(值1,值2...);


寫法二:插入指定欄位
insert into table_name(column_name1,column_name2)
values(值1,值2);
注意:
a.使用寫法一時,需要插入全部欄位,欄位值不能多也
不能少
b.欄位值是字元時候需要使用單引號
c.欄位值是日期型別,需要考慮當前的會話日期格式


演示日期資料插入:
create table temp(
birth date
);
//插入資料
insert into temp values('17-5月-18');


alter session set nls_date_format='yyyy-mm-dd';
insert into temp(birth) values('2018-05-16');


//查詢temp表資料
select sysdate from dual;
select birth from temp;


未選定行:表示查詢不到任何一條記錄


//往部門表插入資料
insert into dept_xu values(10,'研發部','南京');
insert into dept_xu values(20,'財務部','蘇州');
insert into dept_xu values(30,'銷售部','合肥');
insert into dept_xu(deptno,dname,location) 
values(40,'行政部','上海');


commit;
//檢視錶
select deptno,dname,location from dept_xu;


//建立員工表(emp_xu)
create table emp_xu(
empno number(4),
ename varchar2(10),
position varchar2(20),
salary number(7,2),
bonus number(5,2),
hiredate date,
leader number(4),
deptno number(2)
);
//檢視
select empno,ename from emp_xu;


2)更新資料update
寫法:
update table_name set column_name1=值1,
column_name2=值2 where condition;//多列修改逗號隔開
注意:如果沒有where語句(條件),則表示表中的欄位
全部被修改成相同的值。


//更新部門表中40號部門的部門地點改為'無錫'
update dept_xu set location='無錫' where 
deptno=40;


commit;//手動提交


3)刪除資料delete
寫法:
delete [from] table_name [where condition];//[]可選項
注意:如果沒有where語句,則表示表的資料全部被刪除


//刪除部門表中50號部門的資料
insert into dept_xu(deptno,dname) 
values(50,'後勤部');//指定欄位


delete from dept_xu where deptno=50;
commit;


刪除相關:
DDL:
   drop table table_name;//刪除表內容和結構
   truncate table table_name;//刪除表內容保留結構
   
DML:
   delete from table_name;//刪除表內容保留結構  


truncate和delete區別:
a.delete是屬於資料操縱語言DML,truncate屬於資料
定義語言DDL
b.delete可以有條件刪除,truncate則表示全部刪除
c.delete可以回退(撤銷),truncate立即生效不可以
回退
d.如果刪除全部資料並且資料量比較大,delete語句
的執行效率比truncate效率低。


2、基礎查詢
1)簡單查詢表資料
select sysdate from dual;
select deptno,dname,location from dept_xu;
select empno,ename from emp_xu;


select * from emp_xu;//星號表示查詢表的全部列
//設定換行字元
set linesize 100


//查詢1005的員工資訊
查詢哪個表->判斷是否有條件->補全結果集
select *
from emp_xu
where empno=1005;


2)列別名
計算員工的月薪和年薪(salary*12)
select ename,salary,salary*12 [as] year_salary
from emp_xu;//as表示可選項,可以不加的


3)空值問題
空值使用NULL表示的
結論要注意:
a.任何資料型別都可以取空值null(插入資料)
insert into dept_xu(deptno,dname) 
values(50,'後勤部');
insert into dept_xu values(50,'後勤部',null);


b.空值和任何資料型別進行算術運算時結果都是
空值null
//計算員工的月薪(salary+bonus)
select ename,salary,bonus,salary+bonus month_sal
from emp_xu;//錯誤結果


c.空值和字串型別做連線操作,結果相當於空值不
存在


4)空值處理函式
語法:nvl(d1,d2)
如果d1為空值時,則用d2來代替,否則就用d1的值
注意:nvl函式的兩個引數可以是數值、字元、日期,
但是兩個引數的資料型別必須一致


修改:
select ename,salary,bonus,
salary+nvl(bonus,0) month_sal
from emp_xu;


insert into emp_xu(empno,ename) 
values(1013,'歐陽鋒');


//查詢員工的姓名和職位,如果沒有職位則顯示
'No Position'
select ename,
nvl(position,'No Position') as position
from emp_xu;


//查詢員工的入職時間,沒有入職時間顯示當前時間
select ename,nvl(hiredate,sysdate) hiredate
from emp_xu;


select ename,nvl(hiredate,'17-5月-18') hiredate
from emp_xu;


5)插入一條記錄
insert into emp_xu(empno,ename) 
values(1013,'歐陽鋒');//指定欄位


insert into emp_xu
values(1013,'歐陽鋒',null,null,null,null,null,null);//
全部欄位,如果最後一個null預設,會報錯的,null
和什麼都不寫是不同的


6)連線符
連線符操作使用||
'||'符號表示將兩個資料連線起來,類似於java中
兩個字串的'+'號。其中一個資料為null時,相當於
不連線任何資料。


//查詢員工的姓名和職位進行連線操作
select empno,ename || ' is ' || nvl(position,'No Position') 
from emp_xu;


7)複製表
select * from emp_xu;
create table temp_emp as select * from emp_xu;
select * from temp_emp;


8)去掉重複資料
去重使用distinct
注意:distinct表示去重必須只能跟在select後面


//查詢有哪些職位
select position from emp_xu;//資料有重複,職位
為空也算一個職位


select distinct position from emp_xu;//沒有職位
算一種職位


//查詢有哪些部門
select distinct deptno from dept_xu;//存在一個
部門沒有員工情況,為了資料準確該使用部門表


//查詢每個部門不重複的職位(不同部門可以有相同職位)
select distinct deptno,position from emp_xu;//
需要多兩個欄位進行聯合去重,distinct指全部列的
唯一組合


9)大小寫問題
SQL語句大小寫不敏感(不區分),資料(單引號裡面的)
大小寫敏感(區分)


//查詢職位是'Analyst'的員工資訊
select *
from emp_xu
where position='Analyst';//查詢出3條記錄


select *
from emp_xu
where position='analyst';//未選定行,資料區分大小寫的


SELECT *
from emp_xu
where position='Analyst';//sql語句不區分大小寫


lower():將字元資料轉換成小寫
upper():將字元資料轉換成大寫
select lower('AB') from dual;


select *
from emp_xu
where lower(position)='analyst';


10)介於兩者之間
between 低值 and 高值
注意:臨界值
閉區間:[低值,高值]


//查詢薪水大於等於5000並且小於等於10000的員工資訊
select ename,salary
from emp_xu
where salary>=5000 and salary<=10000;


等同於:
select ename,salary
from emp_xu
where salary between 5000 and 10000;


11)IN關鍵字使用
//查詢職位是'Manager'或者'Analyst'的員工資訊
select ename,position
from emp_xu
where position='Manager' or position='Analyst';


等同於:
select ename,position
from emp_xu
where position in('Manager','Analyst');//in表示
判斷在不在列表項中,只要滿足一個即可


12)模糊查詢
模糊查詢使用like,"%"表示0到多個字元,"_"表示1個
字元


//查詢員工姓名包含'張'字的員工資訊
select ename from emp_xu
where ename like '%張%';


//查詢職位中第二個字元是'a'的員工姓名和職位
select ename,position
from emp_xu
where lower(position) like '_a%';


//查詢當前使用者下有哪些表的表名是以'EMP_'開頭的
select table_name from user_tables
where upper(table_name) like 'EMP\_%' escape '\';


注意:
如果查詢的資料中包含特殊的字元%、_,在模糊匹配
時需要加上'\'進行轉義,並且用escape來指明轉義
的字元。

相關文章