SQL入门语句


仅供学习使用,大佬请绕道

sql语言介绍及基本查询sql学习

1、数据库表的介绍
				emp表:员工表
				dept表:部门表
				salgrady:薪资水平表
				Balance:
			2、基本的查询语句:
			    知识点:
					select * from 表名  查询表中所有的数据
					select 字段名1,字段名2,..from 表名 查询指定字段的所有值,不同字段之间使用逗号隔开
					使用算术表达式:select 字段名(运算符),字段名(运算符)...from 表名
				案例:
					select * from emp---查询所有员工信息
					select ename,job,sal from emp--查询员工姓名,工作,薪资
					
					查询所有员工一年的工资,以及每位员工年终3000后的所有薪资(不包括津贴)
					select ename,job,sal*12,sal*12+3000 from emp  使用运算符
				
			1、使用别名
			as可以省略不写,如果有特殊字符获取空格使用双引号添加别名
			
			select ename 姓名,job 工作,sal*12 年资,sal*12+3000 年薪 from emp  		直接在字段后面添加别名
			select ename "姓名",job 工作,sal*12 ’年资’,sal*12+3000 年薪 from emp  	使用双引号添加别名,不能使用单引号
			select ename as 姓名,job "工作",sal*12 年资,sal*12+3000 年薪 from emp  	使用as关键字添加别名
			select ename "姓  名",job 工作,sal*12 年资,sal*12+3000 年薪 from emp  	如果别名中有空格或者其他特殊字符,使用双引号

			2、使用链接符:
				select ename,job,sal from emp;
				select ename||job,sal from emp;  使用||符号进行字符链接
				select ename||'  的工作是  '||job||'  并且月工资是  '||sal from emp;  字符链接,普通字符使用单引号
			3、去除重复 distinct
				select * from emp;
				select job from emp--发现工作是重复的,而工作种类是需要去除重复的
				
				问题:查看员工工作种类
				select distinct job from emp  使用distinct关键字去除重复值
				问题;怎么多字段去除重复
				select distinct job,sal from emp;  多字段去除重复,去除的是重复的一整条信息
			4、排序
				知识点:
					select 字段名,字段名...from 表名 order by 字段名
					select *from 表名 order by 字段名
				讲解:
				--查询员工姓名,工作,薪资
				select ename,job,sal from emp
				--查询按照薪资排序的员工姓名,工作,薪资				
				select ename,job,sal from emp order by sal;  使用order by排序
				
				select ename,job,sal from emp order by sal desc;  	使用desc关键从大到小排序
				select ename,job,sal from emp order by sal asc;  	使用asc关键从小到大排序,默认是从小到大排序
				select * from emp order by sal,ename  				多字段作为排序条件的时候,优先按照第一个字段排序,然后依次按照其他字段排序。
				select ename,job,sal 工资 from emp order by 工资  	使用别名
				select ename,job,sal from emp order by sal*12  		使用算术表达式

简单的where子句

使用where条件进行结果筛选
			语法:select * from 表名 where 条件;注意:条件中字段值区分大小写,字段名不区分大小写,字段值使用单引号括起来
				1、在where中使用算术表达式 = ,< , > ,>= ,<= ,<>
				2、使用order by 对筛选结果进行排序,order by 出现在where后面
			
			
			查看工资等于1250的员工信息
				select * from emp where sal='1250'--筛选条件是个数字也可以使用单引号
			查看工作等于CLERK的员工信息
				select * from emp where job='CLERK'--在筛选条件中字段值如果是字符需要加上单引号
				select * from emp where job='clerk'--在sql语句中字段的值是区分大小写的
				select * from emp where JOB='CLERK'--在sql中字段是不区分大小写的
			查看工资大于1250的员工姓名和工作
				select ename,job ,sal from emp   where sal>'1250' order by sal--使用order by 对筛选结果进行排序,order by 出现在where后面
			查看工资大于等于2000的员工信息
				select * from emp where sal>=2000;
			查看工资小于等于2000的员工信息;
				select * from emp where sal<=2000
			查看工资不等于1500的员工信息
				select * from emp where sal<>1500 order by sal
			查看入职日期在81年后的员工信息
				select * from emp where hiredate>'1981年12月31号'
				select * from emp where hiredate>'1981/12/31'
				select * from emp where hiredate>'31-12月-1981'--使用日期的默认格式查询符合要求的数据,日-月-年
		
		where子句使用关键字
			使用where子句进行结果的筛选
			
			知识点:where查询条件中使用关键字
				1、and 用于多条件的与筛选:select * from 表名 where 条件 and 条件 and 条件....
				2、or 用于多条件的或筛选: select * from 表名 where 条件 or 条件 or 条件....
				3、in 用于多条件的或筛选: select * from 表名 where 字段名 in(值,值,值....)
				4、like用于模糊查询:      select * from 表名 where 字段名 like '%值%' 包含
				5、is null 和is not null 用来判断字段是否为空  select * from 表名 where 字段名 is null 
		   
		   在where子句中使用关键字
				--查询工资在2000-3000之间的员工信息
				select * from emp where sal>=2000 and sal<=3000--使用and关键字进行"与"的多条件筛选;
				select * from emp where sal between 2000 and 3000;--使用between and 关键字进行筛选;
				--查询工作为SALESMAN,ANALYST,MANAGER的员工信息
				select  * from emp where job='SALESMAN' or job='ANALYST' or job='MANAGER'--使用or关键字进行"或"的多条件筛选
				select * from emp where job in('SALESMAN','ANALYST','MANAGER');--使用in关键字进行"或"的多条件筛选
				select  * from emp where job='ANALYST'
				--查询姓名中包含s的,以s开头的,以s结尾的,第二个字符为A的。
				select * from emp where ename like '%S%';--使用like关键字,姓名中包含S的,%代表任意多个字符
				select * from emp where ename like 'S%';--使用like关键字,以S开头的
				select * from emp where ename like '%S';--以S结尾的
				select * from emp where ename like '_A%'--使用"_"指定位置包含指定字符的信息,"_"代表任意一个字符
				--------------查询名字中包含下划线的用户信息
				select * from emp where ename like '%A_%'escape 'A';--使用escape关键字将普通字符设置成为转译字符。
				--查询有津贴的员工信息
				select * from emp where comm is not null;
				select * from emp where comm is null;--查询没有津贴的员工信息

函数学习

--查询工作为SALESMAN,MANAGER并且工资大于2500的员工信息
			--1、使用小括号提升where筛选条件的执行优先级别
			--2、and的优先级别高于or
			select * from emp 
			select * from emp where job='SALESMAN' or job='MANAGER' and sal>2500
			select * from emp where (job='SALESMAN' or job='MANAGER') and sal>2500
			-----------------------------------------------------------------------------------------------------------
			使用函数 单行函数 多行函数 转换函数 其他函数
			--单行函数学习:不改变原始数据,只改变结果
			---1、字符函数
			select * from emp;
			select INITCAP(ename) from emp;--initcap函数将首字母大写
			select lower(ename)from emp;--lower 字母小写
			select replace(ename,'S','M')  from emp;--replace 替换
			--2、数值函数--Math
			----伪表 dual
			select * from dual
			select abs(-3) 绝对值,ceil(3.1415926)向上取整,floor(3.1415926)向下取整,power(2,3)幂,round(3.4)四舍五入 from dual
			--3、日期函数
			select months_between('13-12月-2016','13-10月-2016') from dual--months_between两个日期之间的月份数
		多行函数学习
多行函数 :
			  max: max(字段名) 返回此字段的最大值
			  min:min(字段名) 返回此字段的最小值
			  avg:avg(字段名) 返回平均值
			  sum:sum(字段名) 返回字段的和
			  count:count
						--count(*),用来查询表中有多少条记录
						--count(字段名),用来查询某个字段有值的个数
						--count(distinct 字段名),可以先去除重复再计数。
			  注意:
				   --多行函数不能和普通字段直接出现在查询语句中,除非group by 
				   --多行函数和单行函数不能直接出现在查询语句中,除非group by        
			查看员工的最高工资
				select max(sal),ename from emp--多行函数不能和普通字段直接出现在查询语句中,除非group by
				select max(sal),lower(ename) from emp--多行函数和单行函数不能直接出现在查询语句中,除非group by
				select ename from emp
			查看员工的最低工资
				select min(sal) from emp
			查看员工的平均工资
				select avg(sal) from emp
			查看所有的员工工资之和
				select sum(sal) from emp
			查询公司有多少员工
				select * from emp
				select count(*) from emp--使用count(*)来查看一张表中有多少条记录
			查询有津贴的员工人数
				select count(comm) from emp--使用count(字段名),查询该字段有值的记录数
				select count(ename) from emp
			查询公司有多少工作种类
				select count(job) from emp
				select  count(distinct job) from emp 

转换函数

转换函数:在转换的时候改变的是数据的类型,数据内容不会改变,可以指定格式。
			1、to_number:将数字字符转换为数字类型的数值,to_number(数字字符)
			2、to_char:将数字转换为字符类型,将日期转换为字符类型 to_char(数字/日期)
			3、to_date:将字符类型的日期转换为日期类型: to_date(char)
			--------------------------------------------------------------------------------------
			number-->char 转换的时候使用的是默认格式,
				select  to_char(123) from dual--将数字转换为字符类型,使用to_char(number)
				select sal, to_char(sal) from emp
			number-->char 使用指定的格式 
				to_char(number,'格式'),格式:
						$代表美元符,9代码数字占位。例如,L999,999,999表示三位一组的显示方式L代表人民币符号,0代表保留数字个数,不足使用0补充。
														 
						select to_char(sal),to_char(sal,'L999,999,999') from emp
						select to_char(sal),to_char(sal,'L0000.00') from emp
			char--->number  to_number(数字字符)
						select to_number('123') from dual
			
			char--->date,转换的字符必须是日期格式的字符串,默认格式 dd-mm-yyyy
						注意:因为字符串有很多,所以在字符转换为日期的时候,需要指定格式,因为日期是具备一定格式的字符组合。
							字符转换为日期的时候,指定的格式为字符的日期顺序,无需指定间隔符。
							yyyy:表示年  mm:表示月   dd表示日
						select to_date('05-12月-2016') from dual;
						select to_date('2016-05-12','yyyy-mm-dd') from dual--使用指定的格式将指定的日期字符串转换为日期
						select to_date('12-05-2016','mm/dd/yyyy') from dual
			date--->char
						注意:因为日期本身就具备一定的格式在不是指定格式的情况下会默认使用dd-mm-yyyy格式显示数据
							指定的格式会作为日期转换为字符串类型的显示格式存在。例如:
							yyyy-mm-dd'   ‘2016-12-05’
							yyyy/mm/dd'    '2016/12/05'
							yyyy"年"mm"月"dd"日"'     2016年12月05日
						select hiredate,to_char(hiredate) from emp--日期转换为字符的时候,不指定格式使用默认格式:dd-mm-yyyy
						select hiredate,to_char(hiredate,'yyyy-mm-dd') from emp;--使用指定格式将日期转换为字符串类型
						select hiredate,to_char(hiredate,'yyyy/mm/dd') from emp;--使用指定格式将日期转换为字符串类型
						select hiredate,to_char(hiredate,'yyyy"年"mm"月"dd"日"') from emp;--使用指定格式将日期转换为字符串类型
						
						查询入职日期在81年10月20日后的员工信息
							第一种:自动转型
						select * from emp where hiredate>'20-10月-1981'
							第二种:将日期转换为字符串
						select * from emp where to_char(hiredate,'yyyy-mm-dd')>'1981-10-20'
							第三种:
						select * from emp where hiredate>to_date('1981-10-20','yyyy/mm/dd')

其他函数

1、nvl():nvl(字段名,执行)--相当于java中的if条件判断
				2、nvl2():nvl2(字段名,值,值)--相当于java中的If(){}else{}判断
				3、decode():decode(字段名,条件1,执行内容1,条件2,执行内容2,条件3,执行内容3,默认执行内容)
				相当于java中if(){}else if(){}else if(){}...else{}
			查询所有员工的月薪及姓名和工作
				select * from emp
				select ename,sal 基本工资,comm 绩效,sal+comm 月薪 from emp
				select ename,sal 基本工资,comm 绩效,sal+nvl(comm,0)月薪 from emp
			查询所有员工的月薪及姓名和工作
				select ename,sal 基本工资,comm 绩效,nvl2(comm,sal+comm,sal)月薪 from emp
			显示员工的职称
				select ename,job,decode(job,'MANAGER','经理','SALESMAN','销售人员','普通员工') from emp

使用group by分组

			在多行函数中不能直接使用单行函数,除非group by
			group by学习:
					 ---1、使用group by进行数据分组 select 多行函数,分组字段 from 表名 group by 分组字段
					 ---2、多字段进行分组的时候,按照字段顺序进行分组,第一条件分组完成后,继续使用其他条件依次分组。
					 ---3、group by依然可以和order by 联合使用
					 ---4、可以和单行函数联合进行分组,注意使用了单行函数那么在查询语句中必须也要使用
			查询最高工资和员工数
				select max(sal),count(*) from emp
			查询不同部门的最高工资
				select * from emp order by deptno
				select  deptno,max(sal) from emp group by deptno--使用group进行分组查询,分组的字段可以出现在查询中,其他字段依然不可以
			查询不同工作岗位的员工数
				select * from emp for update
				select lower(job),count(*) from emp group by lower(job)--使用单行函数进行分组
			查询不同部门的不同工作岗位的人数
				select deptno,job ,count(*) from emp group by deptno,job--使用多字段组合进行分组
				select deptno,job ,count(*) from emp group by deptno,job order by deptno
			查询不同部门的不同工作岗位的并且人数大于1的信息
				select count(*) from emp where count(*)>3 group by deptno
				select deptno,job ,count(*) from emp where count(*)>1 group by deptno,job order by deptno
			查询部门号大于10的不同部门的不同工作岗位的人数
				select deptno,job ,count(*) from  emp where deptno>10 group by deptno,job order by deptno
			使用having进行分组后筛选
			having学习:
				   --1、使用group by分组后在进行数据筛选的时候,where中不能出现多行函数,所以使用新的关键字having进行条件筛选
				   --2、where条件筛选的执行顺序:from-->where--->group -->select
				   --3、having条件筛选的执行顺序:from-->group by -->having-->select
				   --4、where的执行效率比having要高,能使用where的情况下尽量不要使用having
			查询不同部门的不同工作岗位的并且人数大于1的信息
			使用where语句进行筛选
			where条件语句sql执行顺序:from-->where--->group -->select
				select count(*) from emp where count(*)>1 group by deptno,job
			使用having语句进行筛选
			having条件语句的执行顺序:from-->group by -->having-->select
				select deptno, count(*) from emp  group by deptno having count(*)>5
				select deptno,job ,count(*) from  emp  group by deptno,job  having deptno>10 order by deptno

数据的更新和删除:

			更新数据:update
				语法结构:update 表名 set 字段名1='字段值1',字段名2='字段值2',...where 条件

				将部门70的名字改为教学部2
				update dept set dname='教学部2' where deptno='70' 
				update dept set dname='教学部2',loc='上海' where deptno='70' 
				select * from dept
			删除数据:delete
				1)删除语句:delete 表名 where 条件
				--删除部门标号为70的数据
				delete dept where deptno='70'---删除指定数据
				select * from dept
				delete tdept---清空表数据
				truncate table tdept---清空表数据建议使用truncate关键字,但是此关键字不能回
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值