1、SQL SELECT TOP, LIMIT, ROWNUM 子句

SELECT TOP 子句用于规定要返回的记录的数目。SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。

注: 并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。

SQL Server / MS Access 语法

SELECT TOP number|percent column_name(s)
FROM table_name;

MySQL 语法

SELECT column_name(s)
FROM table_name
LIMIT number;

Oracle 语法

SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;

2、SQL LIKE

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;

"%" 符号用于在模式的前后定义通配符(默认字母)

下面的 SQL 语句选取 name 以字母 "X" 开始的所有用户

SELECT * FROM user
WHERE name LIKE 'X%';

下面的 SQL 语句选取 name 以字母 "X" 结尾的所有用户

SELECT * FROM user
WHERE name LIKE '%X';

Like模糊查询,通常和通配符百分号 % 和 下划线 _ 联合使用

Select * from user where name like 'X%';
查询 user 表中 name 列中有 'X' 的值,X' 为要查询内容中的模糊信息。

百分号%:匹配任意多个字符;下划线 _:任意一个字符(%是一个特殊的符号,_ 也是一个特殊符号)

'X% ':为能配符,正则表达式,表示的意思为模糊查询信息为 X 开头的

'%X ':为能配符,正则表达式,表示的意思为模糊查询信息为 X 结尾的

'%X%' : 表示查询包含X的所有内容

'%X_': 表示查询以X在倒数第二位的所有内容

'_X%':查询第二个字母为 X

'__X%':查询第三个字母为 X

'%\_%':\ 转义字符;查询带有 下划线 _ 的

【】查询名字中含有O

select name from user where name like '%O%';

【】查询名字以O结尾

 select name from user where name like '%O';

【】查询名字以O开始

select name from user where name like 'O%';

【】查询第二个字每是O

select name from user where name like '_O%';

【】查询第三个字母是O

select name from user where name like '__O%';

【】查询名字中有下划线“_”

select name from user where name like '%\_%'; // \转义字符

3、SQL通配符

通配符可用于替代字符串中的任何其他字符;在 SQL 中,通配符与 SQL LIKE 操作符一起使用

通配符 描述
% 替代 0 个或多个字符
_ 替代一个字符
[ charlist ] 字符列中的任何单一字符
[^ charlist ]

[! charlist ]
不在字符列中的任何单一字符

MySQL 中使用 REGEXP NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式

SELECT * FROM user
WHERE name REGEXP '^[A-G]'; -- 选取 name 以 A 到 G 字母开头的用户
SELECT * FROM user
WHERE name REGEXP '^[^A-G]'; -- 选取 name 不以 A 到 G 字母开头的网站

4、SQL IN

IN 操作符允许在 WHERE 子句中规定多个值

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);

in 包含,相当于多个 or (not in 表示不在这几个值当中的数据)

注:in不是一个区间。in后面跟的是具体的值

5、SQL BETWEEN

BETWEEN 操作符用于选取介于两个值之间的数据范围内的值;这些值可以是数值、文本或者日期

between … and …. 两个值之间, 等同于 >= and <=

使用between and的时候,必须遵循左小右大

between and是闭区间,包括两端的值

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

6、SQL 别名 AS

通过使用 SQL,可以为表名称或列名称指定别名

(1)表的 SQL 别名语法

SELECT column_name(s)
FROM table_name AS alias_name;

(2)列的 SQL 别名语法

SELECT column_name AS alias_name
FROM table_name;
select dname as deptname from dept;
//可以省略空格
select dname deptname from dept;

as关键字可以省略,但是不能出现多个字段、空格 ,如别名 dept name,可以修改为 'dept name'

select dname dept name from dept;

上述是错误的, DBMS看到上述SQL语句,进行SQL语句的编译,不符合语法,编译报错

可以 使用单引号' ' 或者 双引号 " "括起来 (在所有的数据库当中,字符串统一使用单引号括起来,单引号是标准,双引号在oracle数据库中用不了。但是在mysql中可以使用)

//加单引号
select dname 'dept name' from dept; 
//加双引号
select dname "dept name" from dept; 

别名是中文,用单引号括起来

//别名是中文,用单引号括起来
select dname '部门名称' from dept; 

【1】as关键字只是将显示的查询结果列名显示为alias_name,原表列名还是叫:column_name 

(select语句是永远都不会进行修改操作,只负责查询)

【2】别名中间有空格,需要使用单引号' ' 或者 双引号 " "括起来;(在所有的数据库当中,字符串统一使用单引号括起来,单引号是标准双引号在oracle数据库中用不了。但是在mysql中可以使用

【3】别名是中文,用单引号括起来

8、SQL UNION

UNION 操作符用于合并两个或多个 SELECT 语句的结果集

UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型

同时,每个 SELECT 语句中的列的顺序必须相同

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

如下,都会报错

select empname,job from emp where job = 'salesman' union select empname from emp where job='manager';
ERROR 1222 (21000): The used SELECT statements have a different number of columns

字段类型不同;MYSQL中可以不会报错,但是Oracle语法严格 ,会报错

select 
    empname,job 
where 
    job = 'salesman' 
union 
select 
    empname,sal 
where 
    job='manager';

UNION 操作符默认选取不同的值。如果允许重复的值,使用 UNION ALL

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名

(2)union 和 join 选择

union的效率要高一些

join表连接,每连接一次新表,则匹配的次数满足笛卡尔积,是两张表行数的乘积

union可以减少匹配的次数;还可以完成两个结果集的拼接

如下:a 连接 b;连接 c

a表10条记录;b表 10条记录;c表 10条记录;join匹配次数:10*10*10 = 1000

a 连接 b一个结果:10 * 10  = 100; a 连接 c一个结果:10 * 10 = 100次;union匹配次数:100 + 100 = 200次

(union把乘法变成了加法运算)

9、SQL SELECT INTO 

SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中

复制所有的列插入到新表

SELECT *
INTO newtable 
FROM table1;

只复制某列插入到新表

SELECT column_name(s)
INTO newtable 
FROM table1;

新表将会使用 SELECT 语句中定义的列名称和类型进行创建,可以使用 AS 子句来应用新名称

MySQL 数据库不支持 SELECT ... INTO 语句,但支持 INSERT INTO ... SELECT 

可以使用以下语句来拷贝表结构及数据

create table user11 (select * from user);
CREATE TABLE user22
SELECT * FROM user ;

10、SQL INSERT INTO SELECT

INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中

我们可以从一个表中复制所有的列插入到另一个已存在的表中:
INSERT INTO table2
SELECT * FROM table1;
只复制某列插入到另一个已存在的表中:
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;

select into from 和 insert into select 都是用来复制表

两者的主要区别为: 

select into from 要求目标表不存在,因为在插入时会自动创建;

insert into select from 要求目标表存在

1、复制表结构及其数据:

create table table_name_new as select * from table_name_old

2、只复制表结构:

create table table_name_new as select * from table_name_old where 1=2;
create table table_name_new like table_name_old

3、只复制表数据:

如果两个表结构一样:

insert into table_name_new select * from table_name_old

如果两个表结构不一样:

insert into table_name_new(column1,column2...) select column1,column2... from table_name_old
1、SQLSELECT TOP, LIMIT, ROWNUM子句SELECT TOP 子句用于规定要返回的记录的数目。SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。注:并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。SQL Server / MS Access 语法SELECT TOP number|percent column_name(s)F..
SQL Server 直接从表中取直接量或者计算量没有列名: SELECT 5, FirstName + ' ' + LastName FROM Students 结果是两列都没有列名 解决这个问题,使用别名。 列的别名 SELECT [原有列名 / 直接量(如5,‘David’等)/ 计算量(如Price * Quantity)]  AS '列的别名'  FROM Ta
今天在项目中有个新的需求:当我传参数的时候,传入的参数为空的时候,查询所有数据。当传入参数不为空的时候,按照输入的参数查询条件进行查询。 这个时候自己本来想着decode函数,后来经历教使用like用法,模糊查询 SELECT b.*, (SELECT COUNT (1) FROM options a WHERE a.pid = b.uuid) zs FROM options b WHERE...
例如下面这条语句就是选取数据表chengjibiao中的score是以9开头的所有数据结果 SELECT * FROM chengjibiao WHERE score LIKE '9%'; 运行结果如下: 其中% 符号是用在模式的前后,是定义通配符。 2选取结尾包含某项 当需要选取数据表che...
SQL中可以使用like关键字结合通配符进行模糊查询。SQL支持的通配符有:%、[ ]、[ ^ ]、_,其中[ ]在微软的Access和SQL Sever支持集合。 1、百分号通配符(%) create table Person( ID Varchar(20), name Varchar(20), age Varchar(10), sex Varchar(2) insert into P...
最近做项目中,偶然发现在SQL语句中出现了as这个词,一直以来没怎么关注是什么意思,毕竟影响不大,今天有空,就在网上查了一些资料,大概有了一些的了解 我们的Sql语句在很多数据库中都是通用的,比如像Mysql数据库 Access数据库. Oracle数据库. Sqlite数据库 .甚至在我们的Excel中也可以使用Sql语句. 在我的数据库中有user这个表,正常来说,想查询该表,那么sql...
在mysql中,select查询可以使用AS关键字为查询的字段起一个别名,该别名用作表达式的列名,并且别名可以在 GROUP BY,ORDER BY或HAVING等语句中使用 查询平均成绩大于60分的同学的学号和平均成绩 select a.sid,round(avg(a.score),2) as course from sc a #round函数是把avg()的数四舍五路保留2位小数 group ...
sql结构化查询语言中,like语句有着至关重要的作用。 like语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串), 它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。 A:% 包含零个或多个字符的任意字符串: 1、like’Mc%’ 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。 2、like’%inger’ 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。 3、like’%en%
我们都知道,在sql语句中,使用as可以对字段、表等取别名,像对一些英文的字段取中文名称,使可读性更高。 比如:现在我的表如下所示: select * from goods; 使用as 将字段变为中文: select id as 序号, name as 名称, cate_id as 分类序号, brand_id as 品牌序号, price as 价格, is_show as 是否上架, is...
like: like一般用在 where 表达式中,已搜索匹配子弹中的指定内容 like 通常与通配符 % 一起使用,%表示通配pattern中出现的内容,而不加通配符%的LIKE语法,表示精确匹配,其实际效果等同于 = 等于运算符 举例:查询姓李的老师,这是使用了通配符 不使用通配符,表示精准查找: 通配符 % 放在前面的表示以 什么什么结尾 匹配,%小,...
一般商品名都可能存在空格,如 $keywords = '金士顿(Kingston)dtG3 U盘 8G',但是直接用sql模糊查询时是获取不到对应的数据的,要先做处理。1、先将输入查询的字符串数据中的所有空格去掉,如PHP用str_replace(' ','',$keywords); 2、使用sql的replace函数,这样sql语句就变成 WHERE REPLACE(goods_name,' ',
iOS开发Provisioning profile "iOS Team Provisioning Profile:xxx" doesn't include signing certificate 41910