【尚硅谷】/*************************************************************************************************/第1章基本SQL-SELECT语句/*************************************************************************************************/1.对于日期型数据,做*,/运算不合法2.包含空值的数学表达式的值都为空值3.别名使用双引号!4.oracle中连接字符串使用"||",而不是java中的"+"5.日期和字符只能在单引号中出现.输出last_name`semailisemailselectlast_name||'`semailis'||emailEMAILfromemployees6.distinct关键字,以下语法错误selectlast_name,distinctdepartment_idfromemployees/*************************************************************************************************/第2章过滤和排序数据/*************************************************************************************************/7.WHERE子句紧随FROM子句8.查询last_name为'King'的员工信息错误1:King没有加上单引号selectfirst_name,last_namefromemployeeswherelast_name=King错误2:在单引号中的值区分大小写selectfirst_name,last_namefromemployeeswherelast_name='king'正确selectfirst_name,last_namefromemployeeswherelast_name='King'9.查询1998-4-24来公司的员工有哪些?注意:日期必须要放在单引号中,且必须是指定的格式selectlast_name,hire_datefromemployeeswherehire_date='24-4月-1998'10.查询工资在5000--10000之间的员工信息.1).使用ANDselect*fromemployeeswheresalary>=5000andsalary<=100002).使用BETWEEN..AND..,注意:包含边界!!select*fromemployeeswheresalarybetween5000and1000011.查询工资等于6000,7000,8000,9000,10000的员工信息1).使用ORselect*fromemployeeswheresalary=6000orsalary=7000orsalary=8000orsalary=9000orsalary=100002).使用INselect*fromemployeeswheresalaryin(6000,7000,8000,9000,10000)12.查询LAST_NAME中有'o'字符的所有员工信息.select*fromemployeeswherelast_namelike'%o%'13.查询LAST_NAME中第二个字符是'o'的所有员工信息.select*fromemployeeswherelast_namelike'_o%'14.查询LAST_NAME中含有'_'字符的所有员工信息1).准备工作:updateemployeessetlast_name='Jones_Tom'whereemployee_id=1952).使用escape说明转义字符.select*fromemployeeswherelast_namelike'%\_%'escape'\'15.查询COMMISSION_PCT字段为空的所有员工信息selectlast_name,commission_pctfromemployeeswherecommission_pctisnull16.查询COMMISSION_PCT字段不为空的所有员工信息selectlast_name,commission_pctfromemployeeswherecommission_pctisnotnull17.ORDERBY:1).若查询中有表达式运算,一般使用别名排序2).按多个列排序:先按第一列排序,若第一列中有相同的,再按第二列排序.格式:ORDERBY一级排序列ASC/DESC,二级排序列ASC/DESC;/*************************************************************************************************/第3章单行函数/*************************************************************************************************/18.打印出"2009年10月14日9:25:40"格式的当前系统的日期和时间.selectto_char(sysdate,'YYYY"年"MM"月"DD"日"HH:MI:SS')fromdual注意:使用双引号向日期中添加字符19.格式化数字:1234567.89为1,234,567.89selectto_char(1234567.89,'999,999,999.99')fromdual20.字符串转为数字时1).若字符串中没有特殊字符,可以进行隐式转换:select'1234567.89'+100fromdual2).若字符串中有特殊字符,例如'1,234,567.89',则无法进行隐式转换,需要使用to_number()来完成selectto_number('1,234,567.89','999,999,999.99')+100fromdual21.对于把日期作为查询条件的查询,一般都使用to_date()把一个字符串转为日期,这样可以不必关注日期格式selectlast_name,hire_datefromemployeeswherehire_date=to_date('1998-5-23','yyyy-mm-dd')--whereto_char(hire_date,'yyyy-mm-dd')='1998-5-23'22.转换函数:to_char(),to_number(),to_date()23.查询每个月倒数第2天入职的员工的信息.selectlast_name,hire_datefromemployeeswherehire_date=last_day(hire_date)-124.计算公司员工的年薪--错误写法:因为空值计算的结果还是空值selectlast_name,salary*12*(1+commission_pct)year_salfromemployees--正确写法selectlast_name,salary*12*(1+nvl(commission_pct,0))year_salfromemployees25.查询部门号为10,20,30的员工信息,若部门号为10,则打印其工资的1.1倍,20号部门,则打印其工资的1.2倍,30号部门打印其工资的1.3倍数--使用case-when-then-else-endselectlast_name,department_id,salary,casedepartment_idwhen10thensalary*1.1when20thensalary*1.2when30thensalary*1.3endnew_salfromemployeeswheredepartment_idin(10,20,30)--使用decodeselectlast_name,department_id,salary,decode(department_id,10,salary*1.1,20,salary*1.2,30,salary*1.3)new_salfromemployeeswheredepartment_idin(10,20,30)/*************************************************************************************************/第4章多表查询/*************************************************************************************************/26.多表连接查询时,若两个表有同名的列,必须使用表的别名对列名进行引用,否则出错!27.查询出公司员工的last_name,department_name,cityselectlast_name,department_name,cityfromdepartmentsd,employeese,locationslwhered.department_id=e.department_idandd.location_id=l.location_id28.查询出last_name为'Chen'的manager的信息.(员工的manager_id是某员工的employee_id)0).例如:老张的员工号为:"1001",我的员工号为:"1002",我的manager_id为"1001"---我的manager是"老张"1).通过两条sql查询:selectmanager_idfromemployeeswherelower(last_name)='chen'--返回的结果为108select*fromemployeeswhereemployee_id=1082).通过一条sql查询(自连接):selectm.*fromemployeese,employeesmwheree.manager_id=m.employee_idande.last_name='Chen'3).通过一条sql查询(子查询):select*fromemployeeswhereemployee_id=(selectmanager_idfromemployeeswherelast_name='Chen')29.查询每个员工的last_name和GRADE_LEVEL(在JOB_GRADES表中).----非等值连接selectlast_name,salary,grade_level,lowest_sal,highest_salfromemployeese,job_gradesjwheree.salary>=j.lowest_salande.salary<=j.highest_sal30.左外连接和右外连接selectlast_n