SQL查询语句

作者&投稿:住伟 (若有异议请与网页底部的电邮联系)
~

  一、简单查询语句

  1. 查看表结构

  SQL>DESC emp;

  2. 查询所有列

  SQL>SELECT * FROM emp;

  3. 查询指定列

  SQL>SELECT empmo, ename, mgr FROM emp;

  SQL>SELECT DISTINCT mgr FROM emp; 只显示结果不同的项

  4. 查询指定行

  SQL>SELECT * FROM emp WHERE job='CLERK';

  5. 使用算术表达式

  SQL>SELECT ename, sal*13+nvl(comm,0)  FROM emp;

  nvl(comm,1)的意思是,如果comm中有值,则nvl(comm,1)=comm; comm中无值,则nvl(comm,1)=0。

  SQL>SELECT ename, sal*13+nvl(comm,0) year_sal FROM emp; (year_sal为别名,可按别名排序)

  SQL>SELECT * FROM emp WHERE hiredate>'01-1月-82';

  6. 使用like操作符(%,_)

  %表示一个或多个字符,_表示一个字符,[charlist]表示字符列中的任何单一字符,[^charlist]或者[!charlist]不在字符列中的任何单一字符。

  SQL>SELECT * FROM emp WHERE ename like 'S__T%';

  7. 在where条件中使用In

  SQL>SELECT * FROM emp WHERE job IN ('CLERK','ANALYST');

  8. 查询字段内容为空/非空的语句

  SQL>SELECT * FROM emp WHERE mgr IS/IS NOT NULL;

  9. 使用逻辑操作符号

  SQL>SELECT * FROM emp WHERE (sal>500 or job='MANAGE') and ename like 'J%';

  10. 将查询结果按字段的值进行排序

  SQL>SELECT * FROM emp ORDER BY deptno, sal DESC; (按部门升序,并按薪酬降序)

  二、复杂查询

  1. 数据分组(max,min,avg,sum,count)

  SQL>SELECT MAX(sal),MIN(age),AVG(sal),SUM(sal) from emp;

  SQL>SELECT * FROM emp where sal=(SELECT MAX(sal) from emp));

  SQL>SELEC COUNT(*) FROM emp;

  2. group by(用于对查询结果的分组统计) 和 having子句(用于限制分组显示结果)

  SQL>SELECT deptno,MAX(sal),AVG(sal) FROM emp GROUP BY deptno;

  SQL>SELECT deptno, job, AVG(sal),MIN(sal) FROM emp group by deptno,job having AVG(sal)<2000;

  对于数据分组的总结:

  a. 分组函数只能出现在选择列表、having、order by子句中(不能出现在where中)

  b. 如果select语句中同时包含有group by, having, order by,那么它们的顺序是group by, having, order by。

  c. 在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须出现在group by子句中,否则就是会出错。

  使用group by不是使用having的前提条件。

  3. 多表查询

  SQL>SELECT e.name,e.sal,d.dname FROM emp e, dept d WHERE e.deptno=d.deptno order by d.deptno;

  SQL>SELECT e.ename,e.sal,s.grade FROM emp e,salgrade s WHER e.sal BETWEEN s.losal AND s.hisal;

  4. 自连接(指同一张表的连接查询)

  SQL>SELECT er.ename, ee.ename mgr_name from emp er, emp ee where er.mgr=ee.empno;

  5. 子查询(嵌入到其他sql语句中的select语句,也叫嵌套查询)

  5.1 单行子查询

  SQL>SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM emp where ename='SMITH');查询表中与smith同部门的人员名字。因为返回结果只有一行,所以用“=”连接子查询语句

  5.2 多行子查询

  SQL>SELECT ename,job,sal,deptno from emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno=10);查询表中与部门号为10的工作相同的员工的姓名、工作、薪水、部门号。因为返回结果有多行,所以用“IN”连接子查询语句。

  in与exists的区别: exists() 后面的子查询被称做相关子查询,它是不返回列表的值的。只是返回一个ture或false的结果,其运行方式是先运行主查询一次,再去子查询里查询与其对 应的`结果。如果是ture则输出,反之则不输出。再根据主查询中的每一行去子查询里去查询。in()后面的子查询,是返回结果集的,换句话说执行次序和 exists()不一样。子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去。符合要求的输出,反之则不输出。

  5.3 使用ALL

  SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ALL (SELECT sal FROM emp WHERE deptno=30);或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MAX(sal) FROM emp WHERE deptno=30);查询工资比部门号为30号的所有员工工资都高的员工的姓名、薪水和部门号。以上两个语句在功能上是一样的,但执行效率上,函数会高 得多。

  5.4 使用ANY

  SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ANY (SELECT sal FROM emp WHERE deptno=30);或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MIN(sal) FROM emp WHERE deptno=30);查询工资比部门号为30号的任意一个员工工资高(只要比某一员工工资高即可)的员工的姓名、薪水和部门号。以上两个语句在功能上是 一样的,但执行效率上,函数会高得多。

  5.5 多列子查询

  SQL>SELECT * FROM emp WHERE (job, deptno)=(SELECT job, deptno FROM emp WHERE ename='SMITH');

  5.6 在from子句中使用子查询

  SQL>SELECT emp.deptno,emp.ename,emp.sal,t_avgsal.avgsal FROM emp,(SELECT emp.deptno,avg(emp.sal) avgsal FROM emp GROUP BY emp.deptno) t_avgsal where emp.deptno=t_avgsal.deptno AND emp.sal>t_avgsal.avgsal ORDER BY emp.deptno;

  5.7 分页查询

  数据库的每行数据都有一个对应的行号,称为rownum.

  SQL>SELECT a2.* FROM (SELECT a1.*, ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal) a1 WHERE ROWNUM<=10) a2 WHERE rn>=6;

  指定查询列、查询结果排序等,都只需要修改最里层的子查询即可。

  5.8 用查询结果创建新表

  SQL>CREATE TABLE mytable (id,name,sal,job,deptno) AS SELECT empno,ename,sal,job,deptno FROM emp;

  5.9 合并查询(union 并集, intersect 交集, union all 并集+交集, minus差集)

  SQL>SELECT ename, sal, job FROM emp WHERE sal>2500 UNION(INTERSECT/UNION ALL/MINUS) SELECT ename, sal, job FROM emp WHERE job='MANAGER';

  合并查询的执行效率远高于and,or等逻辑查询。

  5.10 使用子查询插入数据

  SQL>CREATE TABLE myEmp(empID number(4), name varchar2(20), sal number(6), job varchar2(10), dept number(2)); 先建一张空表;

  SQL>INSERT INTO myEmp(empID, name, sal, job, dept) SELECT empno, ename, sal, job, deptno FROM emp WHERE deptno=10; 再将emp表中部门号为10的数据插入到新表myEmp中,实现数据的批量查询。

  5.11 使用了查询更新表中的数据

  SQL>UPDATE emp SET(job, sal, comm)=(SELECT job, sal, comm FROM emp where ename='SMITH') WHERE ename='SCOTT';




sql查询语句格式是什么?
sql查询语句格式是:select [列名]from [表名]where [条件]select * from table ,这种是最基本也是最常用的。结构化查询语言(Structured Query Language)简称SQL(发音:\/ˈes kjuː ˈel\/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及...

如何使用sql语句进行批量查询?
select*,max(create_time)froma wherecreate_time<="2017-03-2919:30:36"groupbyuser_id 这句可以理解为将结果集根据user_id分组,每组取time最大一条记录。这样就很好的实现了批量查询最近记录,并且仅仅需要遍历一次表,即使在数据量巨大的情况下也可以在很短的时间查出结果。

sql查询语句?
SQL查询就是用的select相关的语句,根据不用的需求,设置关键属性值和查询区间即可完成一条查询语句

15个MySQL常用基本SQL语句
如果需要一次性插入多条记录,SQL语句格式为:例如,向表stuinfo再插入两条记录,SQL语句为:注意:如果设置了主键,插入记录的主键字段是不能重复的,也就是不能插入重复的记录。作业:大家可以按照上述方法将上面的学员信息表中的所有记录都插入表stuinfo中。8、查询记录 有了数据之后,就可以查询记录了...

SQL数据库语句查询
一、简单查询 简单的transact-sql查询只包括选择列表、from子句和where子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。select nickname,email from testtable where name='张三'(一)选择列表 选择列表(select_list)...

求SQL语句的写法
使用MySQL实现已知每日产量求月累计数,可以使用窗口函数和子查询来实现。具体步骤如下:创建测试表格并插入数据 首先,需要创建一个测试表格并插入数据:CREATE TABLE production (date DATE,daily_production INT,monthly_production INT);INSERT INTO production (date, daily_production) VALUES('2023-01-...

SQL 数据库常用命令及语法举例
SQL2000常用命令,语法使用方法 (1) 数据记录筛选:sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]"sql="select * from 数据表 where 字段名 like '%字段值%' order by 字段名 [desc]"sql="select top 10 * from 数据表 where 字段名 order by 字段名 [desc]"...

sql数据库查询语句例子
各位同学们好,我们今天继续来说,sql数据库。我们今天的文档中主要介绍了SQL查询语句、查询语句示例等。这里我给大家做了一个总结,有需要的同学可以参考一下。首先,我们来了解一下SQL数据库组成基本:查找Movies表里的Title字段:查找ID小于5的电影的Title和Director的以下这些:查看电影的总条数 以下...

SQL模糊查询语句怎么写啊
2、select * from (表名) where (搜索名称)like '%%' and id like '%(简介)%'3、用 Like 子句。比如:Select * from [TableName] where [名称] Like '%SQL%' and [简介] like '%Software%'这就是查询 [名称]字段中包含 “SQL”、并且[简介]字段中包含 “Software” 的记录。4、...

SQL问题:编写查询语句
) >= 2);注: 如果数据库是 SQL Server, 那么用 LEN 替换掉上面的 LENGTH 为数据表tbl_student的stuBirthday字段添加检查约束,约束名为CK_Birthday,要求该字段>=`1990-1-1`。ALTER TABLE tbl_student ADD CONSTRAINT CK_Birthday CHECK ( stuBirthday >= '1990-1-1' );

淄博市13218543132: sql查询语句大全 -
裴杭必诺: 一、基础1、说明:创建数据库 Create DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7...

淄博市13218543132: sql查询语句如何写 -
裴杭必诺: 我的写法是oracle的,如果是其他数据库,自己调整(比如mysql的必须有别名等等) 两个办法 (1)编号和还款日期合并求最大值,然后再查询一次. select * from table where 编号||还款记录 in (select 编号||max(还款记录) 合并记录 from table group by 编号) (2)开窗函数,按照还款日期排序,然后求最大的那个. select 编号,还款日期,金额 from (select rank()over(group by 编号 order by 还款日期 desc) 倒序,编号,还款记录,金额 from table) where 倒序=1

淄博市13218543132: sql简单查询语句 -
裴杭必诺: ......为点分真不容易 1 select * from StuInfo 2 select 考号,姓名,语文,数学,英语 from StuMarks 3 select s1.考号,s1.姓名,s1.性别,s2.计算机基础,s2.SQL数据库from StuInfo s1left join StuMarks s2 on s1.学号=s2.学号where 专业名!='...

淄博市13218543132: SQL查询语句有哪些? -
裴杭必诺: 查询语句只有一种SELECT ... FROM WHERE ... (GROUP BY ... ORDER BY ...) 只是根据想要的结果不一样,而查询的内容会稍有修改. 比如FROM的表名,可以不是一张表,而是一个SELECT查询的结果作为一张表. 同样,查询统计分组汇总...

淄博市13218543132: sql所有查询的语句 -
裴杭必诺: 下面内容供你参考 1.查看所有用户: select * from dba_users; select * from all_users; select * from user_users;2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限): select * from dba_sys_privs; select * from user_sys_privs; 3.查看角...

淄博市13218543132: SQL的查询语句是什么? -
裴杭必诺: 这要运用SQL的联结查询,使用select 字段名 from 表名 where 条件 (select 字段名(注意:此字段要和前面的字段一样)from 表名(另一个表)where 条件)

淄博市13218543132: sql 查询语句 -
裴杭必诺: 查询两个字段合并为一个字段,使用concat,sql如下 selectconcat('(',user,',',book,')') as '购买(顾客,书籍)' from table;

淄博市13218543132: ```解释下SQL查询语句? -
裴杭必诺: SELECT 字段 FROM 表格名 WHERE 条件 SELECT 字段 FROM 表格名 WHERE 字段 IN ('值1', '值2', ...)SELECT 字段 FROM 表格名 WHERE 字段 BETWEEN '值1' AND '值2' SELECT 字段 FROM 表格名 WHERE 条件 ORDER BY "栏位" [ASC, DESC] order by的意思是排序,ASC 是升序 desc 是降序 SELECT COUNT(字段) FROM 表格名 count 是计数 SELECT SUM(字段) FROM 表格名 sum 是合计 以上是我罗列的基本查询语句,希望你满意

淄博市13218543132: 数据库 SQL 查询语句 -
裴杭必诺: SELECT * FROM tab WHERE number in ( SELECT number FROM tab GROUP by number HAVING COUNT(type) = 2) 这个更加精确,是不重复的type SELECT * FROM tab WHERE number in ( SELECT number FROM tab GROUP by number ...

淄博市13218543132: SQL数据库查询语句
裴杭必诺: 一、 简单查询 简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句.它们分别说明所查询列、查询的表或视图、以及搜索条件等. 例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段. SELECT ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网