SQL简单语句总结

一:SQL 语句中

SQL 语句中常用注释方式
 (1) 单行注释: -- , 
 (2) 多行注释  /* */ 

1: select 语句中从数据库中选取的数据, 结果被存储在一个结果表中,称为结果集。

select column_name, colume_name from table_name;

2: select distinct 语句用于返回唯一不同的值。

select distinct column_name, column_name from table_name

3: where 子句用于提取那些满足指定条件的记录

select column_name, colume_name from table_name where colume_name operator value;

select * from table where name = ‘王记勇’;

在 where 中有 文本字段 和 数值字段时

(1)文本字段使用了 单引号。

(2)数字字段,请不要使用引号。

select * from websites where id = 1;

select * from websites country= ‘China’;

where 后面:

= : 等于

<> : 不等于 (在SQL 的一些版本中, 该操作可被写成 !=)

> : 大于

< : 小于

>= : 大于等于

<=%: 小于等于

between : 在某个范围内

like : 搜索某种模式

in : 指定针对某个列的可能值

特殊条件查询: 通配符

(1): is null;

select * from emp where comm is null;

(2): between and (在 之间的值)

select * from emp where sal between 1500 and 3000;

(3):in (), colume_name(2, 3, 4);

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

(4): like 模糊查询

select * from emp where ename like 'M%';

  • 查询 emp 表中 ename 列中有 M 的值,
  • % :表示 多个字值, _ :下划线表示一个字符
  • M% : 为能配符, 正则表达式, 表示的意思为模糊查询信息为 M;
  • %M% : 表示查询包含 M 的所有内容。
  • %M_ : 表示查询以 M 在倒数第二位的所有内容。

不带比较运算符的 where 子句

  • select studentNO from student where 0 会返回一个空集
  • select studetNO from student where 1 返回 studentNO列的值。

4: and 和 or 运算符

(1):AND: 第一个条件和第二条件都成立, 则and 运算符显示一套记录

(2):OR:第一条件和第二个条件只要有一个成立, 则 OR 运算符显示一条记录。

5: SQL 中拥有的计数和计算的内建函数

SQL Aggregate 函数

  • AVG() – 返回平均值
  • COUNT() – 返回行数
  • FIRST() – 返回第一个记录的值
  • LAST() – 返回最后一个记录的值
  • MAX() – 返回最大值
  • MIN() – 返回最小值
  • SUM() — 返回总和

SQL Scalar 函数

  • SQL Scalar 函数基于输入值, 返回一个单一的值。
  • Scalar 函数
    • UCASE() – 将某个字段转换为大写
    • LCASE() – 将某个字段转换为小写
    • MID() – 从某个文本字段提取字段, mysql 中使用
    • subString(字段, 1, end) – 从某个文本字段提取字符
    • LEN() – 返回某个文本字段的长度
    • ROUND() – 对某个数值字段进行指定小数位数的四舍五入
    • NOW() – 返回当前系统的日期和时间
    • FORMAT() – 格式化某个字段的时间方式。

6: 查询中的升序和降序问题

 SELECT 
 	column_name,column_name
 FROM 
 	table_name
 ORDER BY 
 	column_name,column_name ASC|DESC;
 -- ASC : 升序
 -- DESC : 降序
 
 /*
       order by 主要用来解决排序的问题。
 */

7: 表中插入数据 -> insert into

  • 第一种形式:无需指定插入数据的列名, 只需要提供被插入的值即可
INSERT INTO 
	table_name
VALUES 
	(value1, value2, value3....);
  • 第二种形式: 需要指定列名以及被插入的值
INSERT INTO 
	table_name(column1 column2, column3...)
VALUES
	(value1, value2, value3....);

二: SQL 语句中的高级用法


1: Top 进行表中行数数据的查询。

  • (1):按行数进行查询
SELECT  
	*
FROM
	table_name 
WHERE
	ROWNUM <= 10;

  • (2): 按 top 前几行查询
SELECT 
	top 2 *
FROM
	table_name;	 		-- 查询 前两行 的数据
  • (3):按百分比进行查询
SELECT 
	top 50 percent
FROM 
	table_name;			-- 查询百分之50 的数据
  • (4) top 语法格式:
SELECT  
	top number|percent column_name 
FROM
	table_name 

2: like 操作符用于在 where 字句中搜索列中的指定模式

  • 语法格式
SELECT 
	colum_name(s)
From
	table_name
WHERE 
	clumn_name LIKE pattern;
  • like 使用方法
    • 1: WHERE clumn_name like %s 表示: 查询以 s 结尾的字段
    • 2: WHERE clumn_name like a% 表示:查询以 a 开头的字段
    • 3: WHERE clumn_name like %bass% 表示:查询字段中含有 bass 数据的字段
    • 4: WHERE clumn_name not like %bass% 表示:查询字段中不含有 bass 数据的字段

3: 通配符的使用

以下的使用都是在 **WHERE clumn_name like ' '** like 后的分号内进行使用。

  • “_” :表示代替一个字符
  • “%” : 表示代替一个或者几个字符
  • “[abc]”: 表示字段中数据以 a, b, c 开头的数据
  • “[!abc]”: 表示字段中不以a, b, c 开头的数据
  • “[a-d]”: 表示字段以a, b, c, d 开头的字段数据。

4: in 操作符的使用

  • 使用条件:查询多个 字段时, 可以直接进行简写
SELECT  
	*
FROM 
	table_name
WHERE 
	clumn_name IN (name1, name2, name3)
	-- 相当于: clumn_name=name1 or clumn_name=name2 or clumn_name=name3;

5: between … and …

  • 不同的数据库中, between中字段的范围不一样,

    • between … and … 常用于处理:三种字段
      • 数值:
      • 时间值: 时间数据的格式进行类型的转化。
      • 文本值 :根据字段数据的第一个字符进行比较。
/* **********************************************************************
(2) 进行 BETWEEN 数据的查询, 用来查询在两个值的数据类型: 值:可以是数字、时间,文本。
* ***********************************************************************/ 
SELECT
	* 
FROM
	emp
WHERE
	HIREDATE BETWEEN to_date('1981-01-02 00:00:00','yyyy-mm-dd hh24:mi:ss') 
 				and to_date('1981-12-02 00:00:00','yyyy-mm-dd hh24:mi:ss');  -- 时间格式: 进行数据的查询。
AND
	(DEPTNO not BETWEEN 10 and 20) 		 -- 查询数字字段时,实例
AND
   empno not in (1001, 1007, 1008)
AND
	job not BETWEEN 'S' AND 'T';  		-- 后面是文本值时: 只查看第一个字节。记得使用单引号进行数据是引用。
  • Oracle数据库按照时间中: 天, 周, 月, 季度, 年: (扩展)

获取某一天的数据

select clumn_name as 设备,clumn_time 时间 from device d where clumn_time between to_date('2010-9-27 00:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2010-9-27 23:59:59','yyyy-mm-dd hh24:mi:ss')

//返回当天的数据
select clumn_name as 设备,clumn_time 时间 from device d where clumn_time between to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd hh24:mi:ss') and sysdate;

–按照每月进行统计
select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm')

–按照每季度进行统计
select to_char(sysdate,'q') from dual group by to_char(sysdate,'q')
–按照每周度进行统计
select to_char(sysdate,'ww') from dual group by to_char(sysdate,'ww')
–按照每年进行统计
select to_char(sysdate,'yyyy') from dual group by to_char(sysdate,'yy')


6: 取别名:as

  • (1): as 使用情况:
    • 在查询中涉及和超过了一个表(建立两张表的相同字段)
    • 在查询过程中使用了函数
    • 列名称很长或者可读性差
    • 需要把两个或者多个列结合到一起
  • (2):as 作用
    • 用来给 列名或者 表名进行 取别名。

7: SQL 中的约束(Constrainsts)

SQL 中的约束, 用于指定表中的规则:

  • 如果违反约束的数据行为, 行为会被约束终止。
  • 约束可以在创建表规定(create table 语句), 或者创建之后规定(alter table 语句)

SQL 语句中的约束

  • NOT NULL :指定某列不能存储 NULL 值

  • UNIQUE : 保证某列的某行必须有唯一的值

  • 撤销 unique 修饰:

    • alter table table_name drop index column_name MYSQL
      • alter table table_name drop constrait column_name Oralce
  • Primary Key : 和 NOT NULL 和 UNIQUE 的结合, 确保某列有唯一 标识, 有助于特定的记录。

  • 主键必须包含唯一的值

  • 主键列不能包含 NULL 值

  • 每一个表都应该有一个主键, 并且每一个表中只能有一个主键。

  • Foreign key : 保证一个表中的数据匹配另一个表中的值的参照完整性

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FklYla3y-1588677786872)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200504212354304.png)]

    create table table_name1
    (
    column_name1 int not null primary key,
    column_name2 int not null,
    column_name3 varchar(256),
    -- 外键的插入, 关联另一张表。
    column_name4 foreign key references table_name2(column_name4);
    -- 关键字: foreign key references z
    )
    
    -- 添加外键约束:(Oracle)(命名已经存在	)
    alter table table_name1
    add constraint column_name
    foreign key (p_id)
    references table_name2(p_id),
    
    -- 删除外键约束(Oracle)
    alter table table_name1
    drop constraint column_name;
    
    -- 添加外键约束:(Mysql)
    -- 删除外键约束(Mysql)
    
  • Check : 保证列中的值符合指定的条件

  • Default : 规定没有给列赋值时的默认值。

每个表可以有多个 unique, 但是只能有一个 primary Key

8: 创建索引

  • 创建索引的语句:create Index
  • 作用: 在不读区整个表的情况下, 索引时数据库应用程序可以更快的查找数据
  • 索引:
    • 在表中创建索引, 以便可以更加高效的查询数据
    • 注意: 更新一个包含索引的表需要比更新一个没有索引的表书费的时间长, 因为由于索引本更新也需要时间
      • 因此理想的做法是: 在需要搜索的列上创建索引。
-- 在表中创建一个简单的索引(使用时, 允许重复)
create index index_name
on table_name(column_name)


-- 在表上创建一个唯一的索引:
	--1: 不允许使用重复值
	--2: 唯一的索引意味: 两个行不能拥有相同的索引值。
create unique index index_name
on table_name(column_name)

-- 在一个已经创建的表中添加索引
create index Pindex_name
on table_name(column_name1, column_name2);

-- 删除表中的索引: 
alter table table_name drop index index_name;
-- 删除数据库中的表
drop table table_name;
-- 删除表中的数据, 并不删除表结构
truncate table;

9: 对表进行修改

1: 在表中进行添加列:

alter table table_name add column_name datatype;

2: 删除表中的列

alter table table_name drop column column_name

3: 修改列名

alter table table_name modify column column_name datatype

10: 在 SQL 语句中的关键字:auto-increment

  • 在 新的记录中插入表中时,生成一个唯一的数字
    • 在每次插入新的记录时,自动地创建主键字段的值。(auto-increment)字段
create table table_name
(
ID int not null auto_increment,  -- 初始值是 1, 没插入一条数据时, 递增。
LastName varchar255not null,
FirstName varchar (255),
Address varchar(255),
City varchar(255),
Primary Key(ID)
)
-- *************************************************************************
-- Oracle 中的 序列号
-- 必须通过 sequence 对象(该对象生成数字序列)创建 auto-increment字段
-- 使用下面的 create sequence 语法
create sequence seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

-- 上面的代码解释 创建了一个名为 seq_person 的对象, 它以 1 起始且以 1 递增, 该对象缓存 10 个值,以提高性能,cache 选项规定为了提高访问速度要存储 多少个序列值。
-- *************************************************************************

11: 视图 view

  • 可视化的表
  • 在 SQL 语句的结果集的可视化的表。包含行和列, 就像一个真实的表。
  • 视图中的字段来自一个或者多个数据库中的真是的表中的字段。
  • 可以向视图中添加 SQL 函数, WHERE 以及 JOIN 语句, 也可以呈现数据, 就像一个单一的表一样。

可以进行:

  • 创建视图
  • 更新视图
  • 销毁视图

12: 时间函数

  • 常用的三个函数
  • now() : 最近时间
  • curdate(); 最近日期
  • curtime(); 最近时间
  • EXTRACT() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
CREATE TABLE Orders
(
OrderId int NOT NULL,
ProductName varchar(50) NOT NULL,
OrderDate datetime NOT NULL DEFAULT NOW(),		-- 默认插入到 时间是 now();
PRIMARY KEY (OrderId)
)
-----
SELECT EXTRACT(YEAR FROM OrderDate) AS OrderYear,
EXTRACT(MONTH FROM OrderDate) AS OrderMonth,
EXTRACT(DAY FROM OrderDate) AS OrderDay,
FROM Orders
WHERE OrderId=1 
  • 时间处理函数
1: DATE_ADD() 函数向日期添加指定的时间间隔。
DATE_ADD(date,INTERVAL expr type)
2: DATE_SUB() 函数从日期减去指定的时间间隔。
DATE_SUB(date,INTERVAL expr type)
3: 返回两个日期之间的天数
DATEDIFF(date1,date2)
4:DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。
DATE_FORMAT(date, format)

三: 练习查询语句

/****************************************************
Oracle中 SQL语句的基本上使用
*****************************************************/

select * from emp;
select deptno from emp;

/* *******************
(1) 插入全部的数据
* *******************/ 
INSERT INTO
	emp--(EMPNO, ENAME, "JOB", MGR, HIREDATE, sal, COMM, DEPTNO)
VALUES
	(1008,'wang', 'yong', 1006, NULL, 1002, 1000, 20);

/* *****************************
(2) 执行更新某个字段的 SQL 命令
* ******************************/ 
UPDATE
	EMP
SET 
	DEPTNO = 30
WHERE
	EMPNO = 1001;

/* *****************************
(3) detele 进行某个字段的删除
* ******************************/ 
DELETE FROM
	EMP
WHERE
	empno=1008;

/* *****************************
(4) SQl 函数的调用
* ******************************/ 
SELECT 
	AVG(DEPTNO) as orderAverage
FROM
	emp
WHERE
	ROWNUM <= 10;
/* *****************************
(5) 进行 top 数据的查询
* ******************************/ 
SELECT
	top 2 *  DEPTNO
FROM
	emp 
WHERE
	ROWNUM <= 10;								-- Oracle 的语法。

SELECT * FROM emp LIMIT 5; 		-- MYSQL 的语法。
select * from emp;

/* *****************************
(6) 进行 like 数据的查询
* ******************************/ 
SELECT
	ENAME, EMPNO, DEPTNO
FROM
	EMP
WHERE	
	ENAME  not like '%2%';

/* **********************************************************************
(7) 进行 in 数据的查询, 字段中包含的数据信息。用来查询特定的字段
* ***********************************************************************/ 
SELECT
	* 
FROM
	EMP
WHERE
	 DEPTNO not IN (20, 30);   --等同于:DEPTNO=20 or DEPTNO = 30; 
	 
/* **********************************************************************
(8) 进行 BETWEEN 数据的查询, 用来查询在两个值的数据类型: 值:可以是数字、时间,文本。
* ***********************************************************************/ 
SELECT
	* 
FROM
	emp
WHERE
	HIREDATE BETWEEN to_date('1981-01-02 00:00:00','yyyy-mm-dd hh24:mi:ss') 
  and to_date('1981-12-02 00:00:00','yyyy-mm-dd hh24:mi:ss');  -- 时间格式: 进行数据的查询。
AND
	(DEPTNO not BETWEEN 10 and 20) 		-- 查询数字字段时,实例
AND
   empno not in (1001, 1007, 1008)
AND
	job not BETWEEN 'S' AND 'T';  		-- 后面是文本值时: 只查看第一个字节。记得使用单引号进行数据是引用。

/* **********************************************************************
(9) 进行 取别名 数据的查询, 关键字: as 
* ***********************************************************************/ 

SELECT
	ename 							
FROM
	emp as name;

/****************************************************
(10): 连接的拼接使用
*****************************************************/
SELECT
	*
from 
	emp	 FULL JOIN dept on emp.deptno = dept.deptno -- 把表中数据全部显示出来。
ORDER BY
	 EMP.DEPTNO ASC;

/****************************************************
(11): 进行数据修改
*****************************************************/
update 
	DEPT
set 
	DEPT.DEPTNO = 40 
where 
	DEPT.DEPTNO = 30;

/****************************************************
(12): UNION 进行重复数据的整合
*****************************************************/
SELECT DEPTNO from EMP
UNION all			-- 查询的数据中可以有重复值, union: 不可以有重复值
SELECT DEPTNO from dept
order BY DEPTNO asc;

show databases;
/****************************************************
(13): Oracle表的建立
*****************************************************/
CREATE TABLE Student
(
PersonID int UNIQUE,
LastName varchar(255) NOT NULL,
FirstName VARCHAR(255),
Address VARCHAR(255),
City VARCHAR(255)
);

DROP table student;
select * from STUDENT;


/****************************************************
(14): Oracle中查询时间的函数
*****************************************************/

select now(), curdate(), curtime();


/****************************************************
(15): Oracle中查询45天之后的时间函数
*****************************************************/
SELECT
	DATE_ADD(hiredate, INTERVAL 45 DAY) AS new_day
FROM
	emp
WHERE
	empno = 7369;
   
   
/****************************************************
MYSQL 语句的基本上使用
*****************************************************/

SELECT
	 * 
FROM
	emp
limit 5;

/******************************************************************************
(16) as :为 列名和表名进行取别名(mysql 中可以为table 取别名), oracle 不可以。
*******************************************************************************/
SELECT
	-- deptno, ename+','+job as na			 -- column_name 进行取别名				
	 `name`.deptno, `name`.empno, name2.loc
FROM
	emp as name,dept as name2		-- table_name : 进行取别名
WHERE
	`name`.deptno = name2.deptno;
	
/****************************************************
(17): 连接的拼接使用
*****************************************************/
SELECT
	*
from 
	emp	RIGHT JOIN dept on emp.deptno = dept.deptno; -- 把右边表中数据全部显示出来。

	create view emp_empt as select * from emp  full join dept on emp.deptno=dept.deptno;

select now(), curdate(), curtime();

/****************************************************
(18): 创建表的过程
*****************************************************/
create table consume
(
-- P_ID int auto_increment,
Name VARCHAR(255)not null PRIMARY KEY,
Morning int ,
Afternoon int ,
Evening int
);

select (morning+afternoon+evening) as consume1 from consume;

/****************************************************
(19): 时间的分解查询
*****************************************************/
SELECT EXTRACT(YEAR FROM hireDate) AS OrderYear,
 EXTRACT(MONTH FROM hireDate) AS OrderMonth,
 EXTRACT(DAY FROM hireDate) AS OrderDay,
 FROM emp
 WHERE empno=7369;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值