SQL基础.docx
《SQL基础.docx》由会员分享,可在线阅读,更多相关《SQL基础.docx(14页珍藏版)》请在冰点文库上搜索。
SQL基础
SQLPLUS补充:
查看sqlplus命令的方法:
HELPINDEX
连接断开:
disconn
创建表:
CREATETABLE表名(列名类型[约束]…);
插入语句:
INSERTINTO表名[(字段名,字段名…)]VALUES(字段值,字段值…);
&变量名定义与用户交互的变量,用户需要输入相应的数值(可以是表名,列名,变量)
例:
select*fromcustomerswherecustomer_id=&c_id;
&&变量名表示只需输入一次,其他均引用此处的值
例:
select&&v_col,phonefrom&v_tabwhere&&v_col=&v_val;
SETVERIFYON|OFF控制输出内容是否包含变量替换
SETDIFINE‘字符’定义变量标识符
例:
SETDIFINE‘#’
DEFINE变量=值可以定义变量,用DEFINE可查询系统中所有已定义的变量
例:
DEFINEv_col=customer_id;
UNDEFINE变量可以删除已定义变量
例:
UNDEFINEv_col
ACCEPT变量名[type][FORMATformat][PROMPTprompt][HIDE]:
交互式定义变量
例:
ACCEPTv_idnumberformat99prompt'用户ID'
例:
ACCEPTv_passwordCHARPROMPT'Password:
'HIDE
SQL语句
⏹SQL是一种介于关系代数与关系演算之间的结构化查询语言。
SQL是一个通用的、功能极强的数据库语言。
⏹SQL集数据查询(dataquery)、数据操作(datamanipulation)、数据定义(datadefinition)、数据控制(datacontrol)于一体。
⏹SQL语言包括的内容
1.SQLDDL(datadefinition):
定义关系模式、删除关系、建立索引以及修改关系模式;
2.SQLDML(datamanipulation):
查询、插入、删除和修改;
3.嵌入式DML:
嵌入在Pascal、C等宿主语言;
4.视图定义:
创建视图;
5.权限管理:
对关系和视图的访问进行授权;
6.完整性:
定义数据必须满足的完整性约束条件;
7.事务控制(datacontrol):
定义事务的开始、提交、和结束等。
背景知识:
scott用户所有的table的结构
EMPNO:
编号,number
ENAME:
姓名,varchar2
JOB:
职位,varchar2
MGR:
上级,number
HIREDATE:
雇佣日期,date
SAL:
工资number
COMM:
佣金number
DEPTNO:
部门代号number
DEPTNO:
部门代号number
DNAME:
部门名称varchar2
LOC:
部门位置varchar2
GRADE:
工资级别number
LOSAL:
该级别的最低工资number
HISAL:
该级别的最高工资number
简单查询
投影查询(projectselect)
语法:
SELECT[DISTINCT]*|表达式|列名别名,列名别名…FROM表名别名;
例:
SELECT*FROMemp;
例:
SELECT2+3FROMemp;
解释:
返回14行,原因是该表有14行数据,为了简便输出,我们使用dual表,dual是系统内置表,专门用来存放表达式数据,写法是:
SELECT2+3FROMdual;
例:
SELECT2+3RESULTFROMdual;
解释:
可以使用别名
问题:
显示所有员工的编号,职务和工资
例:
SELECTempno,job,salFROMemp;
问题:
显示所有员工的编号,职务和年薪
例:
SELECTempno,job,sal*12“salofyear”FROMemp;
解释:
字段可以参与表达式运算,“”一般不使用,当别名需要保持原始状态,需要加。
问题:
显示员工信息如下格式:
员工编号:
XXX员工姓名:
XXX员工工资:
XXX
例:
SELECT‘员工编号:
’||empno||’员工姓名:
’||ename||’员工工资:
’||sal员工信息FROMemp;
解释:
||代表两个字符串的合并
问题:
显示所有员工的岗位
例:
SELECTDISTINCTjobFROMemp;
解释:
DISTINCT用来去除重复项,重复项必须全部一致,
问题:
显示所有员工的姓名和岗位
例:
SELECTDISTINCTename,jobFROMemp;
解释:
DISTINCTC此处无意义
思考题:
如何显示所有员工的编号及入职年限?
选择查询(条件查询):
语法:
SELECT[DISTINCT]*|表达式|列名别名,列名别名…FROM表名别名WHERE条件(…);
条件可以是:
>、<、<=、>=、<>、!
=、=、ANY、ALL、BETWEEN…AND、IN、LIKE、ISNULL、AND、OR、NOT
NOT可以和LIKE、IN、BETWEEN、ISNULL联用
问题:
显示工资大于1500元员工资料
例:
SELECT*FROMempWHEREsal>1500;
问题:
显示工资不等于1500元员工资料
例:
SELECT*FROMempWHEREsal<>1500;
例:
SELECT*FROMempWHEREsal!
=1500;
例:
SELECT*FROMempWHERENOTsal=1500;
问题:
显示员工号小于7800且上级号大于7400的员工资料或工资大于1500元的员工资料
例:
SELECT*FROMempWHEREsal>1500ORempno<7800ANDmgr>7400;
解释:
AND比OR优先级高,比较表达式比AND和OR优先级高
问题:
显示所有有佣金的员工信息
例:
SELECT*FROMempWHEREcommISNOTNULL;
问题:
显示所有没有佣金的员工信息
例:
SELECT*FROMempWHEREcommISNULL;
解释:
NOT可以用于ISNULL条件之中,表示不为空
问题:
查询所有姓名以A开头的员工
例:
SELECT*FROMempWHEREenameLIKE‘A%’;
解释:
LIKE后可以加%或_,%代表任意多位字符_代表一位字符
问题:
查询所有姓名第二个字母是A的员工
例:
SELECT*FROMempWHEREenameLIKE‘_A%’;
问题:
查询所有姓名倒数第二个字母不是A的员工
例:
SELECT*FROMempWHEREenameNOTLIKE‘%A_’;
问题:
查询所有员工号在7500-7800的员工
例:
SELECT*FROMempWHEREempnoBETWEEN7500AND7800;
问题:
查询所有员工号不在7500-7800的员工
例:
SELECT*FROMempWHEREempnoNOTBETWEEN7500AND7800;
问题:
查询所有员工号可以是752176547700及7800的员工
例:
SELECT*FROMempWHEREempnoIN(7521,7654,7700,7800);
问题:
查询所有大于7499,7521,7654员工号的员工信息
例:
SELECT*FROMempWHEREempno>ALL(7499,7521,7654);
问题:
查询所有至少大于7499,7521,7654中的一个的员工号的员工信息
例:
SELECT*FROMempWHEREempno>ANY(7499,7521,7654);
解释:
ALL和ANY区别是:
ALL要比范围内最(大|小)的还要(大|小),ANY比范围内任意的还要(大|小)
结果的排序:
语法:
SELECT[DISTINCT]*|表达式|列名别名,列名别名…FROM表名别名WHERE条件(…)ORDERBY(ASC)DESC;
ASC升序,默认值,DESC降序
ORDERBY必须是整个SELECT语句的最后一个子句。
问题:
显示按工资的从高到底排序的员工信息
例:
SELECT*FROMempORDERBYsalDESC;
问题:
显示按工资的从高到底排序,如果工资一致,按照员工号从小到大排序的员工信息
例:
SELECT*FROMempORDERBYsalDESC,empnoASC;
问题:
显示按入职时间的从早到晚排序的员工信息
例:
SELECT*FROMempORDERBYhiredateASC;
解释:
时间比较是单纯的看时间的数字表示