SQL基础语法

SQL语句

基本语法

查询

SELECT column_name,column_name FROM table_name;
SELECT * FROM table_name;
SELECT DISTINCT column_name FROM table_name;

DISTINCT 关键词用于返回唯一不同的值。

SELECT * FROM table_name WHERE column_name =value;

WHERE 子句用于提取那些满足指定条件的记录。

SELECT * FROM table_name WHERE country='USA' OR id=1

如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。

如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

SELECT column_name FROM table_name ORDER BY column_name DESC;

ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

插入

INSERT INTO table_name VALUES (value1,value2,value3,...);
INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);

插入的第二种形式需要指定列名及被插入的值:

更新

UPDATE table_name SET column1=value1,column2=value2 WHERE some_column=some_value;

删除

DELETE FROM table_name WHERE some_column=some_value;

高级语句

LIMIT语句来选取指定的条数数据,2,3表示从第二行开始往后取3条数据

SELECT * FROM table_name LIMIT 2,3; 

下面的SQL语句选取 name 以字母 “G” 开始的所有客户

SELECT * FROM table_name WHERE name LIKE 'G%';

下面的SQL语句选取不以“市”结尾的城市

select * from table_city where Address not like '%市'

SQL简单通配符

通配符 描述
% 替代 0 个或多个字符
_ 替代一个字符

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

SELECT * FROM table_city WHERE name IN ('北京市','天津市');

下面的SQL语句选取年龄介于 1 到 20 之间的人的数据

SELECT * FROM table_person WHERE age BETWEEN 18 AND 30;

LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name=table2.column_name

RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。

SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name=table2.column_name

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

请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

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

GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。

HAVING 子句可以让我们筛选分组后的各组数据。

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value; 

case when语句

case具有两种格式。简单case函数和case搜索函数。

case 列名
 when   条件值1   then  选项1
 when   条件值2   then  选项2.......
 else   默认值    end

查询is_deleted转换为汉字

select column_name, case IS_DELETED when 1 then '是' when 2 then '否'else '默认' end as is_deleted from _table

统计各个单位删除的数据的数量

select code, name,
sum(case IS_DELETED when 1 then 1 else 0 end) as 已删除,
sum(case IS_DELETED when 2 then 2 else 0 end) as 未删除
from _test
group by code, name

查询薪水区间

select 薪水区间, count(*) from (
select
case
    when SALARY > 1000 and SALARY <= 2000 then '1000-2000'
    when SALARY > 2000 and SALARY <= 3000 then '2000-3000'
    when SALARY > 3000 and SALARY <= 4000 then '3000-4000'
else '4000以上' end as 薪水区间
from A_TEST2) tt
group by 薪水区间

复制表结构和数据SQL语句

1.复制表结构及数据到新表

CREATE TABLE 新表 SELECT * FROM 旧表

2.只复制表结构到新表

CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2

即:让WHERE条件不成立.

方法二:(由tianshibao提供)

CREATE TABLE 新表 LIKE 旧表

3.复制旧表的数据到新表(假设两个表结构一样)

INSERT INTO 新表 SELECT * FROM 旧表

4.复制旧表的数据到新表(假设两个表结构不一样)

INSERT INTO 新表(字段1,字段2,…) SELECT 字段1,字段2,… FROM 旧表

Oracle通过执行计划查看查询语句是否使用索引

explain plan for后面为要生成执行计划的查询语句

explain plan for 
select * from table where id = '1001'
select * from table(dbms_xplan.display) 

SQL函数

聚合函数

MAX(col) 返回指定列中的最大值。

COUNT(col) 返回指定列中非NULL值的数量。可用于数字和字符列。

数字函数

ABS(num_expr) 返回数值表达式的绝对值。

ROUND(num_expr,length) 对数值表达式截取指定的长度,返回四舍五入后的值。

字符串函数

LEN(char_expr) 返回字符表达式的长度。

TRIM(char_expr ) 返回删除掉开头和结尾空格的字符表达式。

CONCAT(char_expr1, char_expr2, char_exprn) 返回连接的字符串。

日期函数

SELECT SYSDATE();当前日期时间

转换函数

下列两个函数用于将(任何类型的)值转换为指定的数据类型

CONVERT(data_type[(length)], expression [, style])

CAST(expression AS datatype(length))

条件函数

条件函数有两类,一类是CASE(),另一类是IF()

窗口函数

最主要的作用是在不减少原表行数的情况下进行分组排序等计算,语法大致如下

<窗口函数>over(partition by 分组字段 order by 排序字段)
–分组和排序字段不是必须项,视问题情况而定

主要分为3类,分别是聚合窗口函数、排序窗口函数、偏移窗口函数

聚合窗口函数是avg、sum、count、max、min等;

排序窗口函数是rank、dense_rank、row_number;

偏移窗口函数是lag、lead

嵌套查询

在SQL中,写嵌套查询有两种形式,第一种,最直观的就是from 后写一个子查询,并且把子查询用()包含起来,形成一个完整的整体,例如:

select abc from ( select abc from table)

()内部的即为一个完整的子查询。

第二种是with语法:

with temp_table1 as (select abc from table),
     temp_table2 as (select abc from temp_table1)
select * from temp_table2

通过with语法,可以定义多个视图,视图用括号左右包含起来。多个临时表之间,用逗号分隔。with语句的最后不需要加逗号,直接跟select语句。

数据模型

数据模型(DataModel) 用于描述数据在数据库中的组织形式。常见的模型有关系模型(Relational),键值模型(Key/Value),图模型(Graph),文档模型(Document),列簇模型(Column-family)等。关系型数据库采用关系模型。Redis采用键值模型。图数据库采用图模型。MongolDB采用文档模型。

关系指的是一些相互之间有关系的属性组成的一个实体,因为各个列属性之间存在关联关系,而被称为一个关系,其实指的是属性之间的相关性,这种相关性体现在:属于同一行;满足列之间的约束条件;满足行之间的约束条件;满足不同关系之间的约束条件。通过不同的约束条件,是全部的数据形成一种有组织的存在。

数据库通过关系模型,定义出一个个关系实体,确保内容之间满足一定的约束标间,并且提供编程接口去读写数据库内容。一个数据库包含一堆关系,每个关系是一个多行多列的表格。每一行的各个列之间是相关的,也可能会定义一些约束条件。行与行之间,也可能通过定义唯一键(Primary Key),定义排序方式来约束行之间的关系。关系与关系之间,可以通过外部键来实现。

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