sql 查询基本语法

1、计算列

select * from emp

--*表示所有的

--from emp 表示从emp表查询

select empno,ename from emp;

select ename,sal*12 as "年薪" from emp

--as可以省略,记住“年薪“不要写成‘年薪’,也不要写成 年薪,方便移植

select ename,sal*12 as "年薪",sal "月薪",job from emp

select 5 from emp;

--OK ,输出一个常量值

--输出的行数是emp表的行数,每行只有一个字段,值是5

select 5;

--ok

--不建议使用,没什么实际意义

注意:

在Oracle中字段的别名不允许用单引号括起来

但是SqlServer 2005中却允许

因此为了兼容性,最好字段别名用双引号括起来,不要用单引号

2、distinct【不允许重复的】

select distinct deptno from emp;         --distinct deptno 会过滤掉重复的deptno值

select distinct comm from emp;         --distinct可以过滤掉重复的null,或者说如果有多个null,会把一个输出

select distinct comm,deptno from emp;          --distinct把comm和deptno的组合进行过滤,查出两两互不相同的记录,

select distinct deptno,comm from emp

--含义:把deptno和comm的组合都不重复的输出

select deptno,distinct comm from emp --error,deptno的元素多comm中的元素少

select deptno,distinct comm from emp;             --error,逻辑上有冲突

学习方式:要多思考

3.between【在某个范围之内】

--查找工资在1500到3000之间(包括1500到3000)的所有员工的信息

select * from emp where sal between 1500 and 3000;

--等价于

select * from emp where sal>=1500 and sal<=3000;

--查找工资小于1500或者大于3000(包括1500到3000)的所有员工的信息

select * from emp where sal<1500 or sal>3000;

select * from emp where sal not between 1500 and 3000;

4.in【属于若干个孤立值】

--把sal=1500 和sal=3000的元素输出

select * from emp where sal in (1500,3000);

--等价于

select * from emp where sal=1500 or sal=3000

--把sal不等于1500 和sal不等于3000的元素输出

select * from emp where sal not in (1500,3000);

--等价于

select * from emp where sal!=1500 and sal!=3000

select * from emp where sal<>1500 and sal<>3000

--数据库中不等于有两种表示:!=,  <>,建议使用第二种

--多或取反是并且 非并且取反是或

5、top:【最前面的若干条诗句】可用于分页

select top 2 * from emp;       --筛选出前两行数据

select top 2 from emp;       --error

select top 15 percent * from emp; --如果百分比不是整数则向上取整

--把工资在1500到3000 之间(包括1500和300)的员工中工资最高的前4个人的信息输出

select top 4 * from emp where sal between 1500 and 3000 order by sal

--执行过程 from哪个表->where->order排序->top->所有字节

--desc 降序,不写则默认是升序(asc)

6、null【没有值,空值】

①、零和人null是不一样的,null表示空值,没有值,零表示一个确定的值

②、null 不能参与如下的运算:<>  !=  =

③、null可以参与如下的运算: is       not is

--输出奖金非空的员工的信息-

select * from emp where comm <> null; --输出为空

select * from emp where comm !=null; --输出为空

select * from emp where comm=null; --输出为空error

--总结:null不参与<> != = 运算

--null可以参与is not is

select * from emp where comm is null; --输出奖金为空的员工的信息

select * from emp where comm is not null; --输出奖金不为空的员工的信息

④、任何类型的数据都允许是null

create table t1(

name nvarchar(20),

cnt int,

riqi datetime

)

insert t1 values(null,null,null);

select * from t1;

⑤、任何数字与null参与数学运算的结果永远是null

--输出每个员工的姓名 年薪(包含奖金) comm假设是一年的奖金

select empno, ename,sal*12+comm "年薪" from emp;

--此程序证明,任何数字与null参与数学运算的结果永远是null

--正确的写法是:

select empno, ename,sal*12+isnull(comm,0) "年薪" from emp;

--isnull(comm,0)如果comm是null 就返回零,否则返回comm的值

7、order by【以某个字段排序】

order by a,b                --a和b都是升序

order by a,b desc        --a升序,降序

order by a desc,b        --a降序,b升序

order by a desc ,b desc    --a降序,b降序

文字描述

如果不指定排序的标准,则默认是升序,升序用asc表示,默认可以不写

为一个字段指定的排序标准并不会对另外一个字段产生影响

强烈建议为每一个字段都指定排序的标准

例子:

--asc是升序的意思,默认可以不写,desc是降序

select * from emp order by sal --默认是按照升序排序

select * from emp order by deptno,sal; -- 先按照deptno升序排序,如果deptno相同,再按照sal升序排序

select * from emp order by deptno desc,sal ;

--先按照deptno降序排序,如果deptno相同,再按照sal升序排序,

--记住sal是升序,不是降序

--order by a desc,b,c,d desc 只对a产生影响, 不会对后面的b、c、d产生影响

select * from emp order by deptno,sal desc;

--问题:desc是否会对deptno产生影响?

--答案:不会、

--先按deptno升序,如果deptno相同,再按sal降序

8、模糊查询

格式:

  select 字段的集合 from 表名 where 某个字段的名字 like匹配的内容

  匹配的条件通常含有通配符

%

表示任意0个或者多个字符
select * from emp where ename like ‘%A%‘;  --ename 只要含有字符A就输出
select * from emp where ename like ‘A%‘; --ename 只要首字母是A的就输出

select * from emp where ename like ‘%A‘; --ename 只要未字母是A的就输出

_[这是下划线 不是减号]

表示 单个字符

select * from emp where ename like ‘_A‘;--ename只要第二个字母是A的就输出

[a-f]

a到f中的任意单个字符,只能是a b c d e f中的任意一个

select * from emp where ename like ‘_[A-F]%‘;

--把ename中第二个字母是A或B或C或D或E或F的数据输出

[a,f]

a或f

[^a-c]

不是a,也不是b,也不是c的任意单个字符

select * from emp where ename like ‘_[^A-F]%‘;

--把ename中第二个字母不是A也不是B也不是C也不是D也不是E也不是F的数据输出

注意:
   匹配的条件必须用单引号括起来   不能省略  也不能改用双引号

通配符

通配符作为不同字符使用的情况

  select * from 表明 where name like ‘%\%%‘  escape ‘\‘   --把name中包含有%的输出
  select * from 表明 where name like ‘%m%%‘  escape ‘m‘ // escape 后面的内容表明在其之后的元素当做转义字符

时间: 2024-11-18 05:30:41

sql 查询基本语法的相关文章

SQL查询语句

查询语句,在开发中使用的次数最多,此处使用"zhangwu" 账务表. 创建账务表: CREATE TABLE zhangwu ( id INT PRIMARY KEY AUTO_INCREMENT, -- 账务ID name VARCHAR(200), -- 账务名称 money DOUBLE, -- 金额 ); 插入表记录: INSERT  INTO zhangwu(id,name,money) VALUES (1,'吃饭支出',247); INSERT  INTO zhangwu

Hibernate 关于执行sql查询语句(转)

原文  http://www.yshjava.cn/post/543.html 主题 SQLHibernate Hibernate对原生SQL查询的支持和控制是通过SQLQuery接口实现的.通过Session接口,我们能够很方便的创建一个SQLQuery(SQLQuery是一个接口,在Hibernate4.2.2之前,默认返回的是SQLQuery的实现类--SQLQueryImpl对象,在下文中出现的SQLQuery如非注明,都是指该子类)对象来进行原生SQL查询: session.creat

笔记:Hibernate SQL 查询

Hibernate 支持使用原生的SQL查询,使用原生SQL查询可以利用某些数据库特性,原生SQL查询也支持将SQL语句放在配置文件中配置,从而提高程序的解耦,命名SQL查询还可以用于调用存储过程. SQL查询是通过SQLQuery接口来表示的,SQLQuery接口是Query接口的子接口,完全可以使用Query接口的方法,SQLQuery增加了二个重载方法 addEntity():将查询到的记录与特定的实体关联 addScalar():江查询的记录关联标量值 执行SQL的步骤如下: 获取Hib

Hibernate之SQL查询

Hibernate支持使用原生的SQL语句进行查询.使用原生的SQL的好处是:可以利用某些数据库的特性(不同的数据库SQL 语法会有所差异), 将原有的使用JDBC作为持久层技术的应用 ,迁移到使用Hibernate作为持久层技术. 我们知道 使用HQL查询 主要牵涉的是 Query接口,而使用SQL查询 主要牵涉的 是 SQLQuery接口  . 而SQLQuery接口 是 Query接口的子接口. 所以 Query接口中的方法 ,均可以在SQLQuery接口中使用 ,SQLQuery接口还多

Atitit.sql&#160;ast&#160;表达式&#160;语法树&#160;语法&#160;解析原理与实现&#160;java&#160;php&#160;c#.net&#160;js&#160;python

Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python 1.1. Sql语法树 ast 如下图锁死1 2. SQL语句解析的思路和过程3 2.1. lexer作为一个工具,完成了对SQL字符串的切割,将语句转化成一个tokens数组.3 2.2. Parser完成了SQL解析的后序部分:使用一个lexer对象作为工具,切出tokens,然后解析语义,绑定相关的系统接口.3 2.3. 关系数据和XML数据库下其抽象语法树分别为: 如图

【知了堂学习笔记】SQL查询基础语句(单表查询、多表查询)

SQL查询基础 1.单表查询 从数据库中查找数据 专业的称谓又称为投影 基本查询语句结构 select 列 from 表 * 所有列不是所有其他东西 查询所有数据 例:SELECT * FROM t_studen 需要执行比较细的操作  加上条件筛选:查询id为2号的学生信息 SELECT * FROM t_student WHERE id=2; 筛选的执行步骤 例:SELECT * FROM t_student WHERE id=2; SELECT *          (3) 再查询  筛选

【T-SQL进阶】02.理解SQL查询的底层原理

本系列[T-SQL]主要是针对T-SQL的总结. T-SQL基础 [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础]04.表表达式-上篇 [T-SQL基础]04.表表达式-下篇 [T-SQL基础]05.集合运算 [T-SQL基础]06.透视.逆透视.分组集 [T-SQL基础]07.数据修改 [T-SQL基础]08.事务和并发 [T-SQL基础]09.可编程对象 T-SQL进阶 [T-SQL进阶]01.好用的SQ

SQL中部分语法整理

1.SELECT DISTINCT 语句 关键词DISTINCT用于返回唯一不同的值. 语法: SELECT DISTINCT 列名称 FROM 表名称 2.SELECT INTO语句 SELECT INTO语句从一个表中选取数据,然后把数据插入另一个表中. SELECT INTO语句常用于创建表的备份复件或者用于对记录进行存档. SQL SELECT INTO语法 把所有的列插入新表: SELECT *     INTO new_table_name [IN externaldatabase]

oracle常用经典SQL查询

1 常用SQL查询: 2 3 1.查看表空间的名称及大小 4 5 select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size 6 from dba_tablespaces t, dba_data_files d 7 where t.tablespace_name = d.tablespace_name 8 group by t.tablespace_name; 9 10 2.查看表空间物理文件的名称及大小 11 12 sel