SQL-高级命令(一)语句:like通配符,as别名

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 
from 
    emp 
where 
    job = 'salesman' 
union 
select 
    empname,sal 
from 
    emp 
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
AS
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

你可能感兴趣的:(数据库DataBase,SQL)