SQL基础笔记一

1.简单查询:

select * from 表名;

其中select和from是关键字,泛绿色,Oracle所有泛绿色的都是关键字*是通配符,代表所有的列;

表名即需要查询的表的名字,我们要看哪张表里的数据,就写哪个表的名字,查出来的就是这个表的所有数据;

每一句SQL后都需要有分号,分号代表一个SQL语句的结束,切记.

select 列1,列2,列3 from 表名;

当我们要查询表中的一部分列时,就不能使用了,因为查出的是所有的列,比如成绩单表,语文老师只想看语文成绩,就不需要使用select *

当我们想查询部分列时,把想查询的列名代替*即可,如果要查询多列,则多个列名之间用逗号隔开.

比如查询emp表的empno和ename,按照我们上面说的,就可以写作 select empno, ename from emp;更多的列也是如此,都好隔开即可.

这里注意一个细节,我们查询的列名的顺序,决定结果中列展示的前后顺序,即先查询了empno,则数据展示时先展示empno,再查询了ename,则ename第二位展示.

查询结果的展示顺序,只与查询顺序有关.select *时顺序一直是固定的,因为表中列的顺序是固定的,DBA_TAB_COLUMNS表中有COLUMN_ID这个东西,它就决定了表中列的顺序,也决定了展示顺序;

表取别名和列取别名

select b.列1,b.列2 from 表名 b;

我们在查询一部分列时,实际都是列名前都是有表名的,即 表名.列名 的形式,取别名后,就可以用别名代替表名,即变为 别名.列名形式. 因为只有一张表,所有 表名. 这个部分可以省略。

但我们之后会学习到从多张表查询数据,这时候就不能省略了.尤其表名比较长的时候,表取别名就很实用了,可以提高我们的编码效率,不用再多次数据表名. 

select 列1 as 别名1, 列2 别名2 from 表名;

列取别名时,需要注意别名的命名规范:

尽量是单词缩写,若多个单词时,用下划线_连接,不能使用中划线;

数字,_开头时,需要用双引号包裹

列名中包含特殊符号,比如括号等时,需要用双引号包裹

别名可以是中文,且不需要引号,这也是唯一的一处.

2.筛选查询:

数据类型:

                数据类型是指的是数据的格式,这里的数据不是单指数字,是说表里的内容.    

筛选查询:

                之前讲解的都是查询整张表的全部内容或者某几列的全部内容,如果要查询一部分数据,就得用到筛选查询.

基本语法:

select * from 表名 where 列名=值;--查询表中列名的值=值的数据.
比如select * from emp where ename='ADAM';--查询emp表中ename是'ADAM'的人的信息

看列数据类型的几种方式:

        1.select * from 表名;鼠标放在某一列数据上,下方会显示这一列数据的类型;

        2.Ctrl+鼠标左键,在表名上,点击进去后可以看到每一列的数据类型;

        3.USER_TAB_COLUMNS视图内,有每一列的数据类型长度等信息,COLUMN_ID也在里面

筛选查询中还有两个点:

1.in的用法: 现阶段in可以理解为多个or的组合,在某个范围之内的数据 同理还有 not in

2.oracle判空: is null,判断不为空时 is not null.其余的方式都不对(=‘ ’, = null)等.

练习题:

create table emp_0204
(emp_no number(4),
emp_name varchar2(50),
emp_job varchar2(50),
emp_hiredate date,
emp_dept varchar2(50));
insert into emp_0204 values(0001,'Sucre','MANAGER',to_date('19850308','YYYYMMDD'),'10');
insert into emp_0204 values(0002,'Alex','SALESMAN',to_date('19820110','YYYYMMDD'),'10');
commit;

1.查询所有MANAGER的入职时间;

select emp_hiredate from emp where job='MANAGER';

2.查询所有SALESMAN的名字;

select emp_name from emp where emp_job='SALESMAN';

3.查询部门20的MANAGER;

select * from emp where emp_job='MANAGER' and emp_dept='20';

4.查询入职时间在90年之后且职位不是SALESMAN的;

select *from emp where emp_hiredate>to_date('19900101','YYYYMMDD') and emp_job <>'SALESMAN';

5.查询部门10的MANAGER和部门20的SALESMAN;

select * from emp where(
emp_dept='10' and emp_job='MANAGER')
or
(emp_dept='20' and emp_job='SALESMAN');

6.查询部门30的PRESEDENT和部门20的MANA

select * from emp where
(emp_dept='30' and emp_job='PRESIDENT')
or
(emp_dept='20' and emp_job='MANAGER');

7.查询所有部门的SALESMAN;

select * from emp where emp_job='SALESMAN';

8.查询部门10的所有SALESMAN;

select * from emp where emp_dept='10' and emp_job='SALESMAN';

模糊查询:

          模糊查询的概念:条件不完整或者不充分的时候,需要用到模糊查询

          like的用法,模糊查询的语法: select * from 表名 where 列名 like ‘%内容%’;

%和_的含义:%在它和它之前有0个或者多个字符 _在当前位置有一个字符

select * from emp where ename like '%TH%';--ename中包含TH字样的
select * from emp where ename like '___TH';--查询ename以TH结尾,且长度是5位的

 搜索以固定内容开头或者结尾的数据

select * from 表名 where 列名 like '内容%';--以固定内容开头
selct * from 表名 where 列名 like '%内容';--以固定内容结尾的数据
搜索固定长度的数据
select * from 表名 where 列名 like '_____';--搜索长度是5位的数据 考虑函数方式
搜索带%或者_的数据
select * from 表名 where 列名 like '%/%%' escape '/';
select * from 表名 where 列名 like '%/_%' escape '/';
搜索带%和_且不挨着的数据
'%/%%_/_%' escape '/'
'%/_%_/%%' escape '/'

排序

排序语法:

select * from 表名 order by 列名 ;

排序方式;

    order by:排序,也是关键字,按照之后的列和排序方式进行排序

    排序的两种方式 asc,desc:升序 asc (默认), 降序 desc

    多种排序的语法和样式: order by 列名1 asc, 列名2 desc;–先按照第一列排序,当第一列中有重复数据时,按照第二列排序.       如果第一列中没有重复数据,则根据第一列的排序就是最终结果

select * from 表名 order by 列名1 desc, 列名2 asc;

order by 1, order by 2: 1,2代表查询内容的第几列.

排序使用的位置

模糊查询与排序联用时如何使用

select * from 表名 where 列名 Like ‘%内容%’ order by 列名 排序方式;

insert into emp_0204 values (13,'AB_CD','TEST',sysdate-20,'10');
insert into emp_0204 values (14,'A%D','TEST',sysdate-100,'20');
insert into emp_0204 values (15,'A%D_E%F','TEST',sysdate-15,'30');
insert into emp_0204 values (16,'AD_E%F','TEST',sysdate-15,'30');
commit;
--1.查询emp_0204表emp_name包含n的所有人信息;
select * from emp_0204 where emp_name like '%n%';
--2.查询emp_0204表emp_name以H开头的;
select * from emp_0204 where emp_name like 'H%';
--3.查询emp_0204表emp_name以F结尾的;
select * from emp_0204 where emp_name like '%F';
--4.查询emp_0204表emp_name中包含_的;
select * from emp_0204 where emp_name like '%/_%' escape '/';
--5.查询emp_0204表emp_name中包含%的;
select * from emp_0204 where emp_name like '%/%%' escape '/';
--6.查询emp_0204表emp_name中包含%和_的;
select * from emp_0204 where emp_name like '%/_%' escape '/' and emp_name like '%/%%' escape '/';
select * from emp_0204 where emp_name like '%/_%/%%' escape '/' or emp_name like '%/%%/_%' escape '/';
--7.查询emp_0204中emp_dept为10的员工信息,以emp_name升序展示;
select * from emp_0204 where emp_dept='10' order by emp_name asc;
--8.查询emp_0204中emp_dept为20的员工信息,按照emp_job降序展示;
select * from emp_0204 where emp_dept='20' order by emp_job desc;
--9.查询emp_0204中emp_dept为30的员工信息,先按照emp_job升序展示,再按照emp_name降序展示;
select * freom emp_0204 where emp_dept='30' order by emp_job asc,emp_name desc;
--10.查询emp_0204中emp_dept为20的员工信息,按照emp_hiredate降序展示,再按照emp_name升序展示;
select *from emp_0204 where emp_dept='20' order by emp_hiredate desc, emp_name asc;
--11.查询emp_0204中emp_name包含e字母的,按照emp_name升序排序;
select * from emp_0204 where emp_name like '%e%' order by emp_name asc;

分组:

基本语法 多列分组(语法和含义)

group by 列名1,列名2;

select之后的内容(聚合函数,每个什么意思 coount(1), count(2))

分组列,聚合函数处理过的列

MAX–最大值

MIN–最小值

SUM–求和

AVG–平均数

COUNT–数量 count(*), count(1), count(2),

count(列名) 如果列中有空值,那么得出的数量是不包括空值的.

select 内容 from 表名 group by 列名;

内容:分组列或者聚合函数处理过的列

having和where:

where:针对全表数据做过滤

having:针对分组内的数据过滤

group by 列名 having 内容;

having之后的内容:

        1.分组列可用;

        2.聚合函数可以用;

group by, having, order by的写的时候的顺序

SQL执行顺序

select * from 表名 where 条件 group by 列 having 内容 order by 列 asc/desc;

1.同时使用group by, having和order by时的写法;

2.执行顺序:

(1):where条件;

(2):group by;

(3):having 过滤;

(4):select;

(5):order by;

case when 2种写法

case 列名
when 值1 then 执行语句1
when 值2 then 执行语句2
when 值3 then 执行语句3
else 执行语句4 end case;

case
when 列>值1 then 执行语句1
when 列>值2 and 列<值3 then 执行语句2
when 列>值4 and 列<值5 then 执行语句3
else 执行语句4 end case;

扩展:

利用group by过滤重复数据

1:distinct

2:group by–max(rowid)/min(rowid) group by的列名是分组列,通常是主键列

3:union

4:row_number() over(partition by)

rowid–每一行数据都有一个rowid,是一个唯一的字符串,跟数据一一对应,可以用来过滤重复数据

rownum–伪劣,可以过滤数据的前几行,rownum<4,但是不能rownum>某个数据.

习题:

--针对emp_0204表:
--1.获取10部门最晚的入职时间;
select max(emp_hiredate) from emp_0204 where emp_dept='10';
--2.获取20部门的最早入职时间;
select min(emp_hiredate) from emp_0204 where emp_dept='20';
--3.获取SALESMAN中最早的入职时间;
select min(emp_hiredate) from emp_0204 where emp_job='SALESMAN';
--4.获取所有MANAGER中入职最晚的;
select max(emp_hiredate) from emp_0204 where emp_job='MANAGER';
--5.筛选人数超过6人的部门;
select emp_dept from emp_0204 group by emp_dept having count(1)>6
--7.查询sal<1000, 1000-3000,3000-5000和>5000的各阶段人数;
select SUM(case when
sal is null then 1 else 0 end) sal_null,
SUM(case when sal<1000 then 1 else 0 end) sal_1000,
sum(case when sal>=1000 and sal<3000 then 1 else 0 end) sal_1000_3000,
sum(case when sal>=3000 and sal<=5000 then 1 else 0 end) sal_3000_5000,
sum(case when sal>5000 then 1 else 0 end) sal_5000
from emp_0204;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL基础教程是一本系统介绍SQL语言的教材,下面是我整理的一些笔记。 首先,SQL是Structured Query Language(结构化查询语言)的缩写,是一种用于管理和操作关系型数据库的计算机语言。 SQL语言包括了对数据库进行增、删、改、查的操作。其中,增操作使用INSERT语句,可以将新的数据插入到数据库中。删操作使用DELETE语句,可以删除数据库中的数据。改操作使用UPDATE语句,可以修改数据库中已有的数据。查操作使用SELECT语句,可以从数据库中查询所需数据。 在SQL中,还存在着一些操作符,如等于(=)、不等于(<>)、大于(>)、小于(<)、AND(并且)、OR(或者)等,用于帮助我们实现更复杂的查询条件。 SQL还提供了一些函数,如SUM、COUNT、AVG、MAX和MIN等,用于对数据进行统计和计算。 此外,SQL还提供了一些关键字,如DISTINCT、ORDER BY、GROUP BY等,用于进一步操作查询结果,实现去重、排序和分组等需求。 除了查询语句,SQL还支持多表联结查询,通过JOIN语句可以将多个表连接起来,在查询结果中展示多个表的数据。 在使用SQL语言操作数据库时,需要注意一些安全性问题。比如,应该使用参数化查询,防止SQL注入攻击。同时,对于敏感的数据,应该限制访问权限,保证数据的安全性。 总而言之,SQL基础教程是一个可以帮助我们深入学习和理解SQL语言的教材。通过学习这个教程,我们可以掌握SQL的基本语法、常用操作符、函数和关键字,进而能够熟练地使用SQL进行数据库管理和操作。 ### 回答2: SQL(Structured Query Language)是结构化查询语言的缩写,是一种用于管理和操作关系型数据库的标准语言。下面是我对《SQL基础教程》的笔记总结: 这本教程首先介绍了SQL的基本概念和发展历史,以及SQL在数据库管理系统中的重要性。然后,详细说明了SQL的语法规则和常用命令,包括SELECT、INSERT、UPDATE、DELETE等。通过学习这些基本命令,我们可以对数据库中的数据进行查询、添加、更新和删除操作,实现对数据的管理和维护。 接下来,教程介绍了SQL的数据类型和约束条件。数据类型包括数值型、字符型、日期型等,而约束条件可确保数据的完整性和一致性,包括主键、外键、唯一性约束等。理解和应用这些数据类型和约束条件,能够使我们创建和维护高质量的数据库。 在教程的后半部分,作者还介绍了SQL的高级应用技巧,包括多表查询、子查询、联合查询等。多表查询可方便地从多个表中检索数据,子查询可用于嵌套查询,联合查询可将多个查询结果合并。掌握这些高级应用技巧,可以更加高效地利用SQL查询复杂的数据。 此外,教程还介绍了SQL的数据操作语言(DML)和数据定义语言(DDL),以及对权限的管理和控制。数据操作语言包括SELECT、INSERT、UPDATE、DELETE等命令,用于操作和管理数据库中的数据;数据定义语言包括CREATE、ALTER、DROP等命令,用于管理数据库的结构和定义。 通过学习这本教程,我掌握了SQL的基本概念和语法,了解了SQL在数据库管理中的重要性和应用场景。我能够使用SQL语言对数据库中的数据进行各种操作,并且能够通过SQL优化查询语句,提高查询效率。这本教程为我进一步学习和应用SQL打下了坚实的基础。 ### 回答3: SQL(Structured Query Language)是一种用于管理和操作关系数据库的标准化语言。在SQL基础教程中,我学到了许多关于SQL的重要概念和技术。 首先,我学习了SQL的起源和发展历史。SQL最初是由IBM的Edgar F. Codd在20世纪70年代提出的,旨在为关系数据库提供一个通用的查询语言。随着时间的推移,SQL逐渐成为了关系数据库管理系统(RDBMS)的行业标准。 其次,我学习了SQL的基本语法和查询操作。SQL通过使用不同的关键字和语句来查询和操作数据库。我学会了使用SELECT语句来检索数据,使用FROM和WHERE子句来指定数据来源和筛选条件。我还学会了使用INSERT、UPDATE和DELETE语句来插入、更新和删除数据。 在SQL基础教程中,我还学习了如何创建和管理数据库表。我学会了使用CREATE TABLE语句来创建表,并定义表的列和数据类型。我还学会了使用ALTER TABLE语句来修改表的结构,并使用DROP TABLE语句来删除表。 此外,我还学习了如何使用SQL来处理表之间的关系。我学会了使用JOIN语句来合并多个表,并通过指定关联条件来检索符合要求的数据。我还学会了使用GROUP BY和HAVING子句来对数据进行分组和过滤。 在SQL基础教程中,我还学习了如何使用SQL来创建和管理索引。索引可以提高查询的性能,我学会了使用CREATE INDEX语句来创建索引,并使用DROP INDEX语句来删除索引。 总之,SQL基础教程帮助我建立了对SQL语言的基本理解和技能。我认为SQL是一个非常重要的技能,在处理和管理数据库时非常实用。通过学习SQL,我可以更有效地查询和操作数据库,提高数据管理和分析的效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值