Upload
zaria
View
204
Download
0
Embed Size (px)
DESCRIPTION
基本的 SQL 语句. 目标. 列出 SELECT 语句的功能 执行基本的 select 语句 区分 SQL 语句和 SQL*PLUS 命令. select 语句的功能. Projection 投影. Selection 选择. Table 1. Table 1. Join 联结. Table 2. Table 1. 基本 select 语句. select 确定处理哪些列 from 确定处理哪些表 DISTINCT 禁止重复 column|expression 选定的列或者表达式 alias 别名. - PowerPoint PPT Presentation
Citation preview
SQL
SELECT
select
SQLSQL*PLUS
selectSelection Projection Table 1Table 2Table 1Table 1Join
selectselectfrom DISTINCT column|expressionalias SELECT *|{[DISTINCT] column|expression [alias],...}FROM table;
SQL
fromMultiply *Divide /Subtract -Add +DescriptionOperator
SELECT EMPNO, SAL, SAL + 300FROM EMP;SAL+300 EMP
SELECT EMPNO, SAL, 12*SAL+100FROM EMP;SELECT EMPNO, SAL, 12*(SAL+100)FROM EMP;
"NOT NULLPRIMARY KEY)
AS
SELECT ENAME AS , JOB FROM EMP;
||SELECTENAME||EMPNO AS "Employees"FROM EMP;SELECT ENAME ||' is a '||EMPNO AS "Employee Details"FROM EMP;
SELECT DEPTNOFROM emp;SELECT DISTINCT DEPTNOFROM emp;
SQLPLUS DESCRIBE emp
WHEREWHEREFROM
SELECT *|{[DISTINCT] column|expression [alias],...}FROM table;
DD-MON-RRSELECT EMPNO, ENAME, JOB, DEPTNOFROM empWHERE DEPTNO = 90 ;SELECT EMPNO, ENAME, JOB, DEPTNOFROM empWHERE ENAME = KING ;
Not equal to
Between two values (inclusive)BETWEEN ...AND...Match any of a list of values IN(set)Match a character pattern LIKEIs a null value IS NULLLess than
Equal to=MeaningOperator
select empno, ename, job, sal, deptno from emp where sal < 2000;
select empno, ename, job, sal, deptno from emp where sal between 1000 and 2000;
select empno, ename, job, sal, deptno from emp where deptno in (20,30);
select empno, ename, job, sal, deptno from emp where ename like 'K%';%_
select empno, ename, job, comm, deptno from emp where comm is NULL;
Returns TRUE if the condition is falseNOTReturns TRUE if either component condition is trueORReturns TRUE if both component conditions are trueANDMeaningOperatorselect empno, ename, job, sal, deptno from emp where sal < 3000 and ename like 'J%';
select empno, ename, job, sal, deptno from emp where sal < 3000 and ename not like 'J%';
select empno, ename, job, sal, deptno from emp where sal < 3000 or ename like K%';
select empno, ename, job, sal, deptno from emp where sal < 3000 and ename not in ('WARD','KING');
1234IS [NOT] NULL LIKE [NOT] IN5[NOT] BETWEEN6NOT7AND8OR
select empno, ename, job, sal, deptno from emp where ename = 'KING' or deptno = 20 and sal < 2000;
ORDER BY ORDER BYASCDESCORDER BYSELECTORDER BY select empno, ename, sal from emp order by sal;select empno, ename, sal, deptno from emp where deptno=30 order by sal;select empno, ename, sal*12 year, deptno from emp order by year;
select empno, ename, sal, deptno from emp order by sal,deptno;
select empno, ename, sal, deptno from emp order by deptno,sal;
ORDER BYSELECT
3000SQLlabl. sql7782100030002030"Employee""Monthly Salary1981AE
SQL
SELECT
SQLSQL: SQLOracle SQL
:
LOWER (column / expression)UPPER (column / expression) INITCAP (column / expression) CONCAT(column1 / expression1 , column2 / expression2)SUBSTR(column / expression, m [,n])m nm nLENGTH(column / expression)
DD-MON-RROracle47121199991231
SYSDATE SYSDATESYSDATESYSDATEDUALSYSDATE
select sysdate from dual;
24
'08-SEP-95'NEXT_DAY ('01-SEP-95','FRIDAY')'28-FEB-95'LAST_DAY ('01-FEB-95')19.6774194MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')29-FEB-96'ADD_MONTHS (31-JAN-96',1)ResultFunction
NUMBERCHARACTERTO_CHARTO_NUMBERDATETO_CHARTO_DATE
TO_CHAR fm
select ename, to_char(hiredate,'YYYY-MM-FMDD') from emp;TO_CHAR(date, 'format_model')
F3(F2(F1(col,arg1),arg2),arg3)Step 1 = Result 1Step 2 = Result 2Step 3 = Result 3
NVL (exprl, expr2)NVL2 (exprl, expr2, expr3)NULLIF (exprl, expr2)COALESCE (exprl, expr2, ,exprn)
SELECT
:---
WHERE
select empno, ename, dname from emp,dept;
WHERE
SELECT table1.column, table2.columnFROM table1, table2WHERE table1.column1 = table2.column2;
EMPDEPTNODEPTDEPTNOEMPDEPTDEPTNO
nn-1
EMP,DEPT,LOCATIONS
ANDWHEREKINGWHERE
select empno, ename, dname from emp,dept where emp.deptno=dept.deptno and emp.ename=KING;
select ename,grade from emp,salgrade where emp.sal between losal and hisal;empSALSALGRADE
EMPSMITH
select worker.ename || ' works for ' || manager.ename from emp worker, emp manager where worker.MGR=manager.empno;
GROUP BYHAVING
AVGCOUNTMAXMINSUM
Maximum salary in EMPLOYEES table
EMPAverage salary in EMPLOYEES table for each department
HAVINGHAVING1.2.3.HAVING
HAVINGHAVINGgroup_condition HAVINGOracle1.2.3.HAVINGHAVINGGROUP BYGROUP BYHAVINGSELECT
HAVINGOracleOracleHAVINGSELECT ename, empno, salFROM empWHERE sal = (SELECT MIN(sal) FROM emp);800
SELECT empno, enameFROM empWHERE sal = (SELECT MIN(sal) FROM emp GROUP BY deptno);
Select empno, ename, salFrom empWhere sal > ANY (select MIN(sal) from emp group by deptno )OracleSelect empno, ename, salFrom empWhere sal in (950, 800, 1300)
DML(Data Manipulation Language )
INSERTtablecolumn value
()INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (7935, 'SCOTT', 'CLERK', 7782, '15-1-82', 1400, 0, 10);INSERT
INSERTNUMBER
VALUESNULLVALUESNULL VALUES( )INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES (7936, 'SCOTTB', 'CLERK', 7782, '15-1-82', 1500, 10);
SYSDATEINSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES (7937, 'SCOTTB', 'CLERK', 7782, SYSDATE, 1520, 10);INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)VALUES (7938, 'SCOTTC', 'CLERK', 7782, TO_DATE('2011-11-2','YYYY-MM-DD'), 1520, 10);
INSERTVALUESINSERTINSERT INTO BONUS
SELECT ENAME, JOB, SAL, SAL FROM EMP WHERE ENAME='SCOTT';
INSERTINSERTINTOVALUESINSERT INTO (SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM EMP WHERE DEPTNO = 20)VALUES (7939, 'SCOTT6', 'CLERK', 7782, '15-1-82', 1400, 0, 10)
WITH CHECK OPTION WITH CHECK OPTIONINSERTUPDATEDELETE WITH CHECK OPTION20 SELECT10
INSERT INTO (SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM EMP WHERE DEPTNO = 20 WITH CHECK OPTION)VALUES (7940, 'SCOTT6', 'CLERK', 7782, '15-1-82', 1400, 0, 10)
UPDATEtable column value condition
WHERE WHERE UPDATE EMP SET ENAME = 'SNOWFLY' WHERE EMPNO = 7938;
79387782UPDATE EMPSET JOB = (SELECT JOB FROM EMP WHERE EMPNO = 7782), SAL = (SELECT SAL FROM EMP WHERE EMPNO = 7782)WHERE EMPNO = 7938;
table
condition
WHERE WHEREDELETE FROM EMPWHERE ENAME = 'SCOTTB';
DELETEDELETE FROM EMP WHERE ENAME = (SELECT ENAME FROM BONUS)
DMLOracleSQL
DML SQL-COMMITROLLBACK-DDLDCL-SQL*Plus-
COMMIT ROLLBACK COMMITROLLBACK
SQL
-DDL-DCL-SQL*Plus,COMMITROLLBACK SQL*PIUS
COMMIT ROLLBACK SELECTDMLDML
COMMIT
ROLLBACK
--
Oracle
---DML--DDL
1-30 A-Za-z0-9_$ # Oracle
CREATE TABLE CREATE TABLE [schema.]table
(column datatype [DEFAULT expr] [, ...])
DEFAULT
SQL... hiredate DATE DEFAULT SYSDATE, ...
Oracle---Oracle Server-
CREATE TABLE AS subquery
CREATE TABLE COPY_EMPASSELECT * FROM EMP;
ALTER TABLE ALTER TABLE:
ALTER TABLE
DROP TABLEDROP TABLEDROP ANY TABLEDDLDROP TABLEDROP TABLE COPY_EMP;
rename copy_emp to copy2_emp;
TRUNCATE TABLE --TRUNCATE,DELETE
DDL
-NOT NULL-UNIQUE-PRIMARY KEY-FOREIGN KEY-CHECK
OracleSYS_Cn
---
constraint_name constraint_type
NOT NULL
UNIQUE
PRIMARY KEY PRIMARY KEY
PRIMARY KEY
PRIMARY KEY
FOREING KEY
INSERT INTO (SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM EMP WHERE DEPTNO = 20)VALUES (7939, 'SCOTT6', 'CLERK', 7782, '15-1-82', 1400, 0, 10)INSERT INTO (SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM EMP WHERE DEPTNO = 20 WITH CHECK OPTION)VALUES (7940, 'SCOTT6', 'CLERK', 7782, '15-1-82', 1400, 0, 10) SELECT INSERTUPDATEDELETE JHDML
Oracle DMLSELECT(DML)OracleDMLDML DML DML DDLCREATE TABLEDCL) CREATE TABLE COPY_EMPASSELECT * FROM EMP;rename copy_emp to copy2_emp;TRUNCATEDELETETRUNCATE(DDL)TRUNCATE
OracleSYS_CnnUSER_CONSTRAINTSCREATE TABLE EMP (EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,ENAME VARCHAR2(10),JOB VARCHAR2(9) NOT NULL,MGR NUMBER(4),HIREDATE DATE constraint hiredate NOT NULL,SAL NUMBER(7,2),COMM NUMBER(7,2),DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
PRIMARY KEYPRIMARY KEYPRIMARY KEYUNIQUEDEPARTMENTSDEPARTMENT_ID!J PRIMARY KEY DEPT_ID_PKPRIMARY KEYUNIQUEFOREIGN KEY (DEPARTMENT_IDEMPLOYEES (DEPARTMENTS (DEPARTMENT_IDNULLREFERENCES: