Java 8---SELECT简单查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37527943/article/details/85011302

导读

1.简单单表查询
2.查询子句之ORDER BY:排序
3.查询子句之WHERE:条件子句

数据库脚本文件:
	后缀:sql
	注释:--
	
	可以把各个对象的创建(表,序列等),以及数据的添加放到一个脚本中
	执行脚本:
		方式1:start 脚本路径   注意:start后面要跟一个空格
		方式2:@脚本路径        注意:@后面不需要空格
		
		从脚本的上面到下面逐行执行,一行出错,后面继续执行
				
	如果执行脚本错误,建议先删除用户,重新创建后再执行脚本
	管理员删除用户:DROP USER 用户名 CASCADE;

简单单表查询

语法:
	1)SELECT 列名1,列名2,...,列名n
	  FROM 表名;
	  
	  从某张表查询指定的列

注意:

		1.执行流程
			FROM,确定数据来源-->SELECT,确定哪些列
		2.如果查询的是一个表的全部列,可以用*代替,
		  查询出来的列顺序与定义时一直,可读性不高,不建议使用
		3.查询时,数值型,日期型可以做算术运算,+,-,*,/
eg3:查询每个员工如果加薪1000后的薪资
		SELECT id,salary+1000
		FROM s_emp;
4.关于空值:代表的是未知的,不确定的,没有值	
		空值运算后结果还是空值
		空值转换函数:
			  数值型列:NVL(列,数值)  :如果这个列值为空,则用这个数值代替
			  文本型列:NVL(列,'文本'):如果这个列值为空,则用这个文本代替
eg4:求每个员工包含提成后的月工资总额
		SELECT id,salary*(1+NVL(commission_pct,0)/100)
		FROM s_emp;
5.查询时可以给查询的列或表达式取别名
			SELECT 列名 [AS] 别名,列名...
			FROM 表名;
		  别名如果需要保持原来的大小写,或者别名中包含一些特殊字符,比如空格可以用双引号括起来
eg5:求每个员工包含提成后的月工资总额,取别名为sal
		SELECT id,salary*(1+NVL(commission_pct,0)/100) AS sal
		FROM s_emp;
		
		SELECT id,salary*(1+NVL(commission_pct,0)/100) AS "sal"
		FROM s_emp;
6.查询某个列时,查询去重后的结果,distinct
eg6:查询公司的所有部门名,相同的只保留一份
		SELECT DISTINCT name
		FROM s_dept;
查询补充:
	可以直接查询一个常量或者常量表达式:
		SELECT 1+2 FROM dual;(查询结果就是1+2的结果3)
	此时,为了满足SELECT...FROM...,FROM 后面跟的dual,可以称它为虚表
		SELECT sysdate FROM  dual;
		sysdate:当前系统时间,date类型
	所以dual的作用就是查询某些表达式的结果或者某些函数的作用

查询子句之ORDER BY:排序

语法:
	SELECT ...
	FROM ...
	ORDER BY 列名 ASC|DESC,列名 ASC|DESC ...;

注意:

		1.执行流程:FROM->SELECT,此时确定了结果集->ORDER BY把数据改变位置,排序
		2.ASC:升序,DESC:降序,省略默认是升序
		3.按照多列排序,首先先按照第一列排序,如果第一列相等再按第二列排序...
		4.null值默认为最大
		5.ORDER BY子句永远在查询的最后,排序永远是最后执行
eg1:查询每个员工的编号,名字,部门编号,并按照部门编号升序排序
		SELECT id,first_name,dept_id
		FROM s_emp
		ORDER BY dept_id ASC;

		SELECT id,first_name,dept_id
		FROM s_emp
		ORDER BY dept_id DESC;

		SELECT id,first_name,dept_id
		FROM s_emp
		ORDER BY dept_id;
		
	eg2:查询每个员工的编号,名字,部门编号,薪资,要求按照部门编号升序排序,
		如果部门相同,则按照薪资降序排序
		SELECT id,first_name,dept_id,salary
		FROM s_emp
		ORDER BY dept_id ASC,salary DESC;

在这里插入图片描述

查询子句之WHERE:条件子句

语法:
	SELECT
	FROM
	WHERE 条件
	ORDER BY;

注意:

		1.执行流程:FROM,确定表->WHERE,确定表的行->SELECT,确定列,结果集确定->ORDER BY,排序
		2.WHERE子句紧跟在FROM子句之后
		3.WHERE筛选,逐行判断,如果当前行条件满足,则结果集中包含,否则不包含
		4.条件中的运算符:
			比较运算符:
				>,>=,<,<=,=(等于),!=,<>(不等于)
				BETWEEN...AND...:在...和...之间, 闭区间
				IN,  IN(点值1,点值2,...)
				IS NULL:是空的,空代表未知的,不确定的,不能用=判断
				LIKE:用来模糊查询的
					通配符:
						%:可以代表任意的0个或多个字符
					    _:可以代表任意1个字符
					如果需要%,_表示原本的含义,可以利用escape指定转义字符
					eg:查询以_a开头的名字
						SELECT first_name
						FROM s_emp
						WHERE first_name LIKE '\_a%' escape '\';(表示以_a开头的名字,转义字符只对其后紧挨着的一个字符有效)
				NOT BWTWEEN...AND...:不在...和...之间
				NOT IN
				IS NOT NULL:不是空的
				NOT LIKE
				
			逻辑运算符:
				NOT:非  取反
				AND:与,都成立,结果才成立
				OR:或,只要有一个成立,结果就成立	
				
				优先级:NOT>AND>OR
				
			拼接:||
	
eg1:查询出所有薪资高于1200的员工编号,薪资
	SELECT id,salary
	FROM s_emp
	WHERE salary>1200;
	
	eg2:查询薪资在1100到1450之间的所有员工编号,名字,薪资
	SELECT id,first_name,salary
	FROM s_emp
	WHERE salary BETWEEN 1100 AND 1450;
	
	eg3:查询部门编号为41或44或45的所有员工编号,部门编号
	SELECT id,dept_id
	FROM s_emp
	WHERE dept_id IN(41,44,45);
	
	eg4:查询没有提成的员工的编号,名字
	SELECT id,first_name
	FROM s_emp
	WHERE commission_pct IS NULL;
	
	
	eg5:查询以a结尾的名字
	SELECT id,first_name
	FROM s_emp
	WHERE first_name LIKE '%a';
	
	'B%':以B开头的
	'%b%':包含b的
	'_b%':第二个字符是b
	'_b':长度是2,第二个字符是b
		
	
	eg6:查询薪资低于1000或者薪资高于1500的所有员工id,薪资
	SELECT id,salary
	FROM s_emp
	WHERE salary<1000 OR salary>1500;
	
	eg7:查询在41或44号部门,并且薪资高于1100的员工id,薪资
	SELECT id,dept_id,salary
	FROM s_emp
	WHERE (dept_id=41 OR dept_id=44) AND salary>1100;
	
	
	eg8:查询每个员工的姓名,显示的格式为:名,姓
	SELECT first_name||','||last_name
	FROM s_emp;

猜你喜欢

转载自blog.csdn.net/qq_37527943/article/details/85011302
今日推荐