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)
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),定义排序方式来约束行之间的关系。关系与关系之间,可以通过外部键来实现。