SQL语句小总结

无论是面试过程中,还是未来工作中,SQL都是一定会考到和用到的。所以,在此对之前看过的一些SQL知识点进行一下总结和记录,算是起到一个笔记本的作用。没有深入学习过SQL的和对SQL印象不太深的朋友可以看一下,起到一个快速使用SQL语句的作用(针对有一点SQL知识的人的)。

首先,SQL最基础的就是语句的使用,SQL根据功能分为查询语句、插入语句、修改语句和删除语句,这里用到最多的便是查询语句,首先便总结一下查询语句的用法:

1.简单查询

(1).select name from table;

意思是在table这张表里查询一个名为name的列,它会将表中name下的所有数据查询出来。

(2).select id,name from table;

表示在table中查询出id和name列下的所有数据,两个被查询的列名之间用逗号分隔。

(3).select * from table;

*号表示所有,意思是查询出table表中的所有内容;

注:这样查询出的语句没有过滤也没有排序,是最简单的查询结果;SQL中不区分大小写;且SQL语句可以分成多行写,很多人认为这样更方便阅读和调试,结尾要用“;”号。

2.不同值查询

一个表中存储的数据肯定不会全都不同,查询出来的很多也都是相同的值,如果你不想显示重复值的话,可以在查询时使用“DISTINCT”关键字,作用是去重;

例:select distinct name from table;

意思查询table表中的name一列,并把不出现重复后的结果显示出来,比如一开始的查询结果是 x,x,x,y,y,z,z,z,z,去重之后的结果就是x,y,z。

3.限制结果查询

一般来说限制结果查询会在分页当中用到,因为限制结果查询的用处就是,让查询结果按你想要的行数显示出来,只简单介绍Oracle和MySQL的语句:

(1).select name from table where rownum<=5;

Oracle中使用rownum关键字表示结果限制;

(2).select name from table limit 5;

MySQL中使用limit关键字限制结果;

两者都表示查询table表中name列下的数据,但只显示前五行数据。

4.排序查询

笔试中都会出到的升序降序问题,SQL可以根据不同的条件,按想要的方式对查询结果进行排列,默认是升序排列,这里用到关键字“Order by”,且只是显示结果改变,并未改变数据存放结构。

select id,name from table order by name;

意思就是查找table表中id和name两列的数据并按name的A-Z升序排列显示。

select id,name from table order by name desc;

结果就是降序排列显示,需要在order by的属性后面加上关键字“desc”。

5.过滤数据查询

数据库表一般包含大量的数据,很少需要检索表中的所有行。通常只会根据特定操作或报告的需要提取表数据的子集。想要使用不同的条件,就需要使用到“where”关键字,在“where”后面加各式的条件以达到目的。

(1).select * from table where id=1;

意思是查询出table中id列为1的这一行的所有数据。另外还有大于(>)、小于(<)、不等于(!=)这一系列操作符。

(2).select * from table where price between 5 and 10;

意思是查询table中 价格在5到10之间的所有数据,用“between”关键字和“and” 一起使用,多条件查询也可以用“and”、“or”连接查询条件,表示“并且”和“或者”。

(3).select name, price from table where (id = ‘1‘ or id = ‘01‘) and price>=10;

意思是查询出table表中id为1或者01 且价格大于等于10的数据的name和price;这里涉及到优先级,and的优先级要高于or,所以要加括号,括号的优先级更高,不然结果就只会显示价格高于10的情况。

(4).select id,name from table where name like "f%";

意思是查询table表中name以“f”开头的所有行的id和name数据。 这里用到了“like”关键字和通配符“%”,通配符可以表示其后的所有字符,若是“%f%”则代表name中包含“f”的意思。"f%y"代表“f”开头“y”结尾的意思。

(5).select id as idd from table order by id;

意思是查询table表中的id并升序排列且查询出的结果赋予一个新的列名为“idd”,可以用“as”关键字实现,表示另命名。

6.聚集函数查询

聚集函数分为Avg()、Max()、Min()、Sum()、Count()分别表示返回某列的平均值、返回某列的最大值、返回某列的最小值、返回某列的值之和、返回某列的行数。

(1).select avg(price) as new_price from table;

意思是返回table表中 价格属性的平均值并另命名为new_price。

(2).select count(*) as new from table;

意思是对table表中的行数进行统计,不管表中包含空值还是非空,而count(name),表示统计name列的行数,但是忽略了null值。其余三个函数用法相同,这里就不一一写明。

7.分组数据查询

使用分组可以将数据分为多个组,对每个组进行运算更方便。

(1).select name, count(*) as num from table GROUP BY name;

意思是对table中的name进行分组和计算,例如

name    num

A           3

B           2

C           4

可以看到他对name为ABC的数据行进行了统计并分组。

(2).select id, COUNT(*) AS orders FROM table GROUP BY id HAVING COUNT(*) >= 2;

意思是对table中的id进行分组,并统计每组数,这里也用到了过滤数据,要求统计数目大于等于2,这里的关键字HAVING可以代替“where”的作用,但是平常应使用“where”,HAVING是结合Group By使用的。

8.子查询

可以把select的查询结果用于另一条select的where子句中,以实现一条语句直接完成多条件查询的功能。

SELECT cust_id FROM table WHERE order_num IN (SELECT order_num FROM Order WHERE prod_id = ‘01’);

可以拆分来看,先看括号里是查询order表中的order_num,条件是id为01;而括号外的意思是查询table中的id,条件是num为什么,这里num为括号里查询到的结果。用关键字“IN”来连接子句,执行了两个查询操作,同样可以在括号里再嵌套一个IN(),里面同样可以再添加查询语句。

9.表连接

SQL 最强大的功能之一就是能在数据查询的执行中联结(join)表。联结是利用 SQL 的 SELECT 能执行的最重要的操作,很好地理解联结及其语法是学习 SQL 的极为重要的部分。

SELECT vend_name, prod_name FROM Vendors, Products WHERE Vendors.vend_id = Products.vend_id;

意思是查询Vendor和Product表中的两个name列,且两表的id相等。

目前为止使用的联结称为等值联结(equijoin),它基于两个表之间的相等测试。这种联结也称为内联结(inner join)。其实,可以对这种联结使用稍微不同的语法,明确指定联结的类型。另外还有左外连接等。

当下,是我对于SQL查询语句的一个总结,并不是相当细致和深入,但也算是对查询语句的一个小的学习笔记,都是我一点一点打出来的,也算是原创吧,希望可以帮助到我自己和其他看到的人。另外插入语句和删除、更新语句之后有时间会再写一篇,2016年12月3日。

时间: 2024-11-10 08:05:18

SQL语句小总结的相关文章

sql语句小练习一

近期在学习sql server,老师布置了一些小练习.说实话这些练习题在网上都能找到答案的,可是直接抄答案有什么意思呢?简直是浪费生命! 以下附原题及个人写的sql语句,如有和网上某某的语句相同,只能说纯属雷同了.因为本人不喜欢直接copy某某的东西,学习一定要有一个认真的态度. 原题及答案如下: create database aaa go use aaa go create table student( sno varchar(3), sname varchar(4) not null,--

sql语句小练习

1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名 name kecheng fenshu 张三 语文 81 张三 数学 75 李四 语文 76 李四 数学 90 王五 语文 81 王五 数学 100 王五 英语 90 A:select distinct name from table where name not in (select distinct name from table where fenshu<=80)    关键词 DISTINCT 用于返回唯一不同的值 B:sel

oracle中sql语句小练习(使用连接查询)

假设A(m,n,p),B(m,n,p) --1.A表中有某一项m而B表中没有 使用左连接查询:select a.* from A a left join B b on a.m=b.m where b.m is null; 左连接查询公共部分以及A表中的全部数据,B表中该列值为null的数据即为A中存在而B中不存在的结果. --2.A表中没有某一项m而B表中有 可改为使用右连接查询: select b.* from A a right join B b on a.m=b.m where a.m i

sql语句小练习二

1.创建一个数据库StudentManage, 初始化大小10M,不足以1M每次增长 create database StudentManage on ( name = 'StudentManage_data', filename = 'D:\StudentManage_data.mdf', size = 10mb, maxsize = 100mb, filegrowth = 15% ) log on ( name = 'StudentManage_log', filename = 'D:\St

SQL语句关于时间的查询小心得,希望大家给点意见

查询本月信息:Select * FROM T_Users Where datediff(month,RegisterTime,getdate())=0 昨天的信息:SELECT * FROM T_Users where LastLoginTime>DATEADD(DAY,-2,GETDATE()) AND LastLoginTime<GETDATE() SELECT SUM([DetailMoney]) FROM [dbo].[T_BuyDetails] INNER JOIN [dbo].[T

小贝_mysql sql语句优化过程

sql语句优化 一.SQL优化的一般步骤 (1).通过show status命令了解各种SQL的执行频率. (2).定位执行效率较低的SQL语句-(重点select) (3).通过explain分析低效率的SQL语句的执行情况 (4).确定问题并采取相应的优化措施 (1) 通过showstatus命令了解各种SQL的执行频率 MySQL客户端连接成功后,通过使用show[session|global] status 命令可以提供服务器状态信息.其中的session来表示当前的连接的统计结果,gl

写sql语句连接的时候注意的一个小细节

我在写权限的查询的时候,用到了sql语句的链接写一下出错的时候的代码 $sqlpid="select auth_name from sw_auth where auth_level=0"; if(session('mg_id')!=5){ $sqlpid.="and auth_id in ($ids)"; } show($sqlpid); 出错的截图 根据图中的输出就能知道出错的原因了了,sql语句没写对 正确的代码 $sqlpid="select aut

戈多编程-小谈sql语句的优化分析

在sqlserver大数据查询中,避免不了查询效率减慢,暂且抛弃硬件原因和版本原因,仅从sql语句角度分析. 一. sql 语句性能不达标,主要原因有一下几点: 1. 未建索引,检索导致全表扫描 2. 已建索引,但是未走索引导致索引失效,进而全表扫描. 3. 没有有效的索引视图 二. sql 语句优化 1. 分析比较执行时间计划读取情况 (1) 查看执行时间和cpu占用时间和查询对I/O的操作情况 I.先执行一个400多万数据的sql set statistics time,io on sele

50个常用的sql语句

50个常用的sql语句 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 问题: 1.查询"001"课程比"002"课程成绩高的所有学生的学号: select a.S# from (select s#,score from SC where C#='001') a,(select s#,score from SC wher