sql:1-20

哎,希望后面的路好走点。幸运,是一种现在想来后悔的行为。但是,如果不能该改变自己,有什么资格改变别人。
0.来源
http://www.hechaku.com/sql_oracle/SQL_jianjie.html
1.简介
ANSI['ænsi](an-sei) abbr. 美国国家标准学会
sql可以面向数据库进行增删改查,下面的是什么?将来学会了,记得回来解答下。

SQL 可在数据库中创建存储过程
SQL 可在数据库中创建视图
SQL 可以设置表、存储过程和视图的权限

问:存储过程是啥?创建修改删除表么??

问:视图是啥?

2.数据库由表组成,表由行列组成。
SQL 对大小写不敏感!
某些数据库系统要求在每条 SQL 命令的末端使用分号,分号是在数据库系统中分隔每条 SQL 语句的标准方法。

可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
M:manipulation英 [mə,nɪpjʊ’leɪʃ(ə)n](么内配类神) n. 操纵
definition英 [defɪ’nɪʃ(ə)n] n. 定义
language

查询和更新指令构成了 SQL 的 DML 部分——查找和更新:
SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据

SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

索引是什么鬼?

SQL 中最重要的 DDL 语句:
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引

3.select ,查找
SQL SELECT 语法:
SELECT 列名称 FROM 表名称;

列名称可以用*代替;列名称用“,”分割
SQL 查询程序获得的结果被存放在一个结果集中。

4.SQL SELECT DISTINCT 语句

distinct美 [dɪ’stɪŋkt] adj. 明显的;独特的;

在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。
关键词 DISTINCT 用于返回唯一不同的值。
语法:
SELECT DISTINCT 列名称 FROM 表名称
如果列名只有一列,那么distinct是有用的;如果两列,很抱歉,会出问题。
https://www.cnblogs.com/rainman/archive/2013/05/03/3058451.html
两列的话,distinct是根据第一行的两列和第二行的两列比较,完全一样才会去重。
另外,distinct并不是根据两列的拼接字符串进行比较的。
distinct必须放在开头
解决如下:看不懂,未来要解决!*******
https://blog.csdn.net/hearain528/article/details/43231289
select 要使用字段1,要使用字段2 from 表名 where id in (select min(id) from 表名 group by 不重复字段名)
例:
select byid,id from bbs where id in (select min(id) from bbs group by byid)

耗子王: select min(id) from bbs group by byid 首先看group by byid 这个是不是按照byid分组,这时候byid已经就不重复了,然后select min(id) from bbs是说把分组后的byid取出id最小的作为id id byid 2 2 3 2 4 3 5 3 6 4 byid分组后 2 2 4 3 6 4 加上min(id) 出来的就是2,4,6 然后in查询,出来的就是id和byid都不会重复的结果


5.SQL WHERE 子句,用于限定条件
语法:
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
下面的运算符可在 WHERE 子句中使用:

操作符描述
= 等于
<>不等于
>大于
<小于
>=大于等于
<=小于等于
BETWEEN在某个范围内
LIKE搜索某种模式

注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=。

like的还知道一些,between没见过
例:
WHERE City=‘Beijing’
注意:条件值周围使用的是单引号。SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号

6.SQL AND & OR 运算符,用来过滤
and,两边的条件都要满足才会查找;
or,两边的条件都会被查找
使用圆括号来组成复杂的表达式
(A and B) or C

7.ORDER BY 语句用于对结果集进行排序。
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字.
语法:
select * from table_name order by A;
按照A列升序。
select * from table_name order by A,B;
按照A列升序,如果A列中间有一样的字符,在按B的升序

DESC的用法:
先按顺序排列,在逆序
select * from table_name order by A desc;
按照A列降序。
select * from table_name order by A desc,B asc;
按照A列降序,如果A列中间有一样的字符,在按B的 升序

8.SQL SELECT INTO 语句可用于创建表的备份复件。

SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中。
SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。

SQL SELECT INTO 语法
您可以把所有的列插入新表:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
或者只把希望的列插入新表:
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename

例子:
select * into 新表名 from 旧表名;
将*可以换成想copy的列
in子句可用于向另一个数据库中拷贝表???
SELECT * INTO 新表名 IN ‘Backup.mdb’ FROM 旧表名;

SQL SELECT INTO 实例 - 被连接的表:看不懂
从一个以上的表中选取数据也是可以做到的。
下面的例子会创建一个名为 “Persons_Order_Backup” 的新表,其中包含了从 Persons 和 Orders 两个表中取得的信息:
SELECT Persons.LastName,Orders.OrderNo
INTO Persons_Order_Backup
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P

9、Update 语句用于修改表中的数据。
语法:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
列名称 = 新值 这一动作可以用“,”分割,大量修改。

10.DELETE 语句用于删除表中的行。
语法
DELETE FROM 表名称 WHERE 列名称 = 值

可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name
或者:
DELETE * FROM table_name

11.创建表
create table 表名(列名 属性,新的列名 属性)
varchar2,可变长度字符串;
char,固定长度字符串;
number(a,b),数字——a是整数位,b是小数位;
date,时间
create table aa
(
id number(6,0),
aname varchar2(20),
email char(8),
rdate date
)

12.修改表
https://blog.csdn.net/qq_33369215/article/details/52775308
增加字段,增加age字段;
alter table aa
add age varchar2(10)

删除字段
alter table aa drop column age

修改表名
rename aa to ac
失败,原因可能是创建的aa表没提交

修改字段名:旧名 to 新名
alter table aa
rename column id to aid

更改字段长度,类型
alter table aa modify aid number(8,0)

13.删除表
–删除表数据
truncate table table_name;
delete from table_name
truncate 美 [trʌŋ’ket] (床kei特)adj. 截短的;被删节的。
truncate,只删除表的数据,不删除表结构(就是不删除表)。
这里truncate和delete的区别是,truncate是截断了表,它的效率比delete要快
–删除表的结构
drop table table_name;

14.TOP 子句
TOP 子句用于规定要返回的记录的数目。
SELECT TOP 2 * FROM Persons
返回2行;

SELECT TOP 50 PERCENT * FROM Persons
返回50%
percent英 [pə’sent] n. 百分比

oralce没有top,用的是rownum<=5,返回5行;oralce只能用<=和<这两个;
SELECT * FROM Persons
WHERE ROWNUM <= 5

mysql:limit num
SELECT * FROM Persons LIMIT 5

15.LIKE 操作符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式
语法:
SELECT column_name(s) FROM table_name
WHERE column_name LIKE pattern

like是包含,not like是不包含;
%,替代一个或多个字符
_	 , 仅替代一个字符
[charlist]	  ,字符列中的任何单一字符
[^charlist]或者[!charlist]    不在字符列中的任何单一字符

SELECT * FROM Persons
WHERE City LIKE ‘[ALN]%’
city字段包含 以a或者l或者n开头的字符;
City LIKE ‘[!ALN]%’ city字段不包含 以a或者l或者n开头的字符;

16.IN 操作符
IN 操作符允许我们在 WHERE 子句中规定多个值。

SQL IN 语法
SELECT column_name(s) FROM table_name
WHERE column_name IN (value1,value2,…)

SELECT * FROM Persons
WHERE LastName IN (‘Adams’,‘Carter’)
选取姓氏为 Adams 和 Carter 的行;

17. BETWEEN 操作符
BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。反义是not between ,,, and ,,,
语法:
SELECT column_name(s) FROM table_name
WHERE column_name BETWEEN value1(包含) AND value2(不包含)

有一列是id,列的内容是1,2,3,4;
id between 1 and 3;返回1,2

对oracle来说,between是两边为闭区间,都包含;
有一列是id,列的内容是1,2,3,4,5,6,2,1;
id between 1 and 3:返回1,2,3

18.别名
列名 as 别名;
abcde as a;后面可以用a代替abcde

19.SQL Join
https://www.cnblogs.com/kerrycode/p/5935704.html
SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
join的前提是,一个表有另一表的主键。

根据两个表的相同id得到内容
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P

使用join的内连接:表a INNER JOIN 表b on 条件
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
INNER JOIN 与 JOIN 是相同的。

JOIN: 如果表中有至少一个匹配,则返回行

LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN
LEFT JOIN 关键字语法

SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name

RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

RIGHT JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。

FULL JOIN: 只要其中一个表中存在匹配,就返回行
只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

FULL JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。

20. INSERT语句
语法:
INSERT INTO table_name
(column1,column2…)
VALUES(value1,value2,…)

insert into aa (aid,aname,email,rdate)
values(1,‘liu’,‘184’,to_date ( ‘2007-12-20 18:31:34’ , ‘YYYY-MM-DD HH24:MI:SS’ ))
时间date的用法
https://blog.csdn.net/itxiaobaibai/article/details/80370098

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值