郑州集团网站建设哪家好,2019年做网站还有机会吗,网站建设培训公司排名,做网站找公司怎么找目录 一、常见用法
1.1 创建类
1.2 查询
1.2.1 常见汇总
1.2.2 连接
1.2.3 最大值最小值
1.2.4 计算行数#xff0c;求和#xff0c;平均
1.2.5 排序
1.2.6 按行汇总
1.2.7 插入
1.2.8 optional/NULL/not NULL
1.2.9 更新
1.2.10 删除
1.2.11 个数限制
1.2.12…目录 一、常见用法
1.1 创建类
1.2 查询
1.2.1 常见汇总
1.2.2 连接
1.2.3 最大值最小值
1.2.4 计算行数求和平均
1.2.5 排序
1.2.6 按行汇总
1.2.7 插入
1.2.8 optional/NULL/not NULL
1.2.9 更新
1.2.10 删除
1.2.11 个数限制
1.2.12 临时名称
1.2.13 case判断
二、场景题来源牛客/力扣 一、常见用法
1.1 创建类
1.创建数据库
create database database-namek
2.删除数据库
drop database dbname
3.修改数据库的名称
sp_renamedb old_name, new_name
4.创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
Acreate table tab_new like tab_old (使用旧表创建新表)
Bcreate table tab_new as select col1,col2… from tab_old definition only
5.删除表
drop table tabname
6.增加列(列增加后不能删除)
Alter table tabname add column col type
7.添加主键
Alter table tabname add primary key(col)
8.删除主键
Alter table tabname drop primary key(col)
9.创建索引(索引创建不能修改只能删除)
create [unique] index idxname on tabname(col….)
10.删除索引
drop index idxname
11.创建视图
create view viewname as select statement
12.删除视图
drop view viewname1.2 查询处理类
1.2.1 常见汇总
1.选择select * from table1 where 范围
2.插入insert into table1(field1,field2) values(value1,value2)
3.删除delete from table1 where 范围
4.更新update table1 set field1value1 where 范围
5.查找select * from table1 where field1 like ’%value1%’ —like的语法很精妙查资料!
6.排序select * from table1 order by field1,field2 [desc] -先排序后取
7.总数select count as totalcount from table1
8.求和select sum(field1) as sumvalue from table1
9.平均select avg(field1) as avgvalue from table1
10.最大select max(field1) as maxvalue from table1
11.最小select min(field1) as minvalue from table1Tips:
1查询时from后最多可以跟256张表或视图2where用来过滤指定条件包括betweenlikein可以包含一个或多个and or3like用于在where条件中搜索指定列样式的记录%用于表示0个1个或者多个字符。_用于表示1个字符where CustomerName like _r%;4inWHERE column_name IN (value1, value2, ...)5not:where City not in (Paris, London);6Between选择给定范围内的值:where Price between 10 and 20 and CategoryID in (1,2,3);
1.2.2 连接
内连接(INNER) JOIN返回两个表中具有匹配值的记录 左连接LEFT (OUTER) JOIN返回左表中的所有记录以及右表中匹配的记录 右连接RIGHT (OUTER) JOIN返回右表中的所有记录以及左表中匹配的记录 全连接FULL (OUTER) JOIN当左表或右表中有匹配项时返回所有记录
inner join和join是相同的
select Orders.orderID, Customers.CustomerName, Shippers.ShipperName
from ((Orders
inner join Customers on Orders.CustomerID Customers.CustomerID)
inner join Shippers on Orders.ShipperID Shippers.ShipperID);
1.2.3 最大值最小值
MIN() MAX() Min()返回选择列的最小值max()返回选择列的最大值
# 从Products表中选择最小的价格命名为SmallestPrice
select min(Price) as SmallestPrice from Products;
1.2.4 计算行数求和平均
1COUNT() count()用来返回匹配指定条件的行数如果指定column_name而不是用*NULL值不会被计数
2Sum()函数用来返回一个数值列的总和
3AVG() Avg()函数用来返回一个数值列的平均值NULL值会被忽略
# 从Products表选择Price大于20的价格种类数
select count(distinct Price) as [number of price] from Products where Price 20;
# 从OrderDetails表中选择产品id为1的总金额数单价为10
select sum(Quantity * 10) from OrderDetails where ProductID 1;
# 从Products中选择价格大于平均值的记录
select * from Products where Price (select avg(Price) from Products);
1.2.5 排序
order by用于排序结果集默认升序desc降序
# 按country升序排列CustomerName降序排列
select * from Customers order by Country ASC, CustomerName DESC;
1.2.6 按行汇总
GROUP BYgroup by语句将具有相同值的行分组到汇总行中
select count(CustomerID), Country from Customers group by Country order by count(CustomerID) desc; 题目 . - 力扣LeetCode 答案 # Write your MySQL query statement below
select -- *p.product_id,p.product_name
from Product p
left joinSales s
on p.product_id s.product_id
group byp.product_id
having-- or null表达的不在范围内就转换为nullcount(sale_date between 2019-01-01 and 2019-03-31 or null) count(*)mysql之group by和having用法详解_Mysql_脚本之家
1.2.7 插入
insert into用来在表格里插入新记录
# 指定列插入值
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);# 不指定列需要确保值和表中列完整对应
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
1.2.8 optional/NULL/not NULL
字段可以设置为optional这样插入和更新记录时可以不添加该字段的值会存储为NULL Value
# 选择空值的记录
SELECT column_names
FROM table_name
WHERE column_name IS NULL;# 选择非空的记录
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;
1.2.9 更新
update用来更新表格中已经存在的记录如果漏掉where会更新所有记录
# 更新客户1的ContactName和City
update Customers
set ContactName Alfred Schmidt, City Frankfurt
where CustomerID 1;
1.2.10 删除
Delete用来删除表格中已经存在的记录注意where条件如果漏掉where会删除所有记录
# 删除表格中指定条件的记录只删除记录不删除表格
DELETE FROM table_name WHERE condition;# 完全删除表格
DELETE FROM table_name;# 删除Alfreds Futterkiste的记录
delete from Customers
where CustomerNameAlfreds Futterkiste;
1.2.11 个数限制
LIMIT:LIMIT用来指定返回记录的个数在SQL Server中语法是SELECT TOP在MySQL是LIMIT可以用offset
# 选择CustomerName倒序前三名
select * from Customers
order by CustomerName desc
limit 3;
1.2.12 临时名称
AsAs用于为表或表中的列提供临时名称
# 作用于列
SELECT column_name AS alias_name
FROM table_name;# 作用于表
SELECT column_name(s)
FROM table_name AS alias_name;# 选择ProductName列并且修改为my product
select ProductName as [my product]
from Products;
1.2.13 case判断
CASE 表达式的作用相当于进行判断的函数用来判断各个元素 行是否属于满足了某种条件的集合。这样的函数我们称为特征函数characteristic function或者从定义了集合的角度来将它称为定义函数
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE resultN
END
-- 这里conditionN 是需要被评估的条件如果 conditionN 为真TRUE
-- 则 CASE 表达式返回
-- resultN。如果没有任何条件为真则返回 ELSE 子句中的 resultN
--如果提供了 ELSE 子句。CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE resultN
END
-- 这里expression 是被比较的表达式valueN 是与 expression 进行比较的值
-- 如果匹配则返回 resultN。如果没有任何 valueN 匹配 expression则返回 ELSE
-- 子句中的 resultN如果提供了 ELSE 子句。 题目 . - 力扣LeetCode 答案 select machine_id, round(sum(case when activity_type end then timestamp else -timestamp end) / count(distinct process_id),3) as processing_time
fromActivity
group by machine_id 1.2.14 日期处理
基本语法
DATE_FORMAT(date, format)
date要格式化的日期或时间值。format指定输出格式的字符串。 举例 SELECT DATE_FORMAT(trans_date, %Y-%m-%d) AS formatted_date FROM Transactions; 返回 trans_date 字段的日期值格式为 YYYY-MM-DD。SELECT DATE_FORMAT(trans_date, %m/%d/%Y) AS formatted_date FROM Transactions; 这将返回 trans_date 字段的日期值格式为 MM/DD/YYYY。 1.2.15 IF
基本用法
IF(expression, value_if_true, value_if_false)
expression要评估的表达式。value_if_true如果expression为真非零或非NULL则返回此值。value_if_false如果expression为假零或NULL则返回此值。 举例 SELECT employee_id, employee_name, IF(salary 50000, High, Low) AS salary_level FROM employees;根据他们的薪水水平高于或低于50,000分类的薪水级别。 1.2.16 四舍五入保留小数点后几位
基本用法
ROUND(column_name, decimals)
column_name要四舍五入的列名或数值表达式。decimals可选参数指定要保留的小数位数。如果省略此参数则默认四舍五入到整数。如果 decimals 为负数则表示在小数点左侧进行四舍五入即四舍五入到十位、百位等。 举例 SELECT ROUND(123.567); -- 结果124SELECT ROUND(123.4567, 2); -- 结果123.46 1.2.16 正则表达式 用法举例 题目 答案 select user_id, name, mail
from users
where mail regexp ^[a-zA-Z][a-zA-Z0-9-._]*\\leetcode\\.com$ . - 力扣LeetCode 1.2.17 字符串处理 题目 答案 # Write your MySQL query statement below# mysql 字符串函数各种复习
-- CONCAT(str1, str2)字符连接函数
-- UPPER(str)将字符串改为大写字母
-- LOWER(str)将字符串改为小写字母
-- LENGTH(str)判定字符串长度
-- SUBSTRING(str, a, b):提取字段中的一段从字符串str的第a位开始提取提取b个字符
-- LEFT(str, n)提取字符串最左边的n个字符
-- RIGHT(str, n)提取字符串最右边的n个字符SELECT a.user_id,CONCAT(UPPER(SUBSTRING(a.name, 1, 1)), LOWER(SUBSTRING(a.name, 2))) AS NAME
FROM Activity a ORDER BY a.user_id; . - 力扣LeetCode
1.2.18 窗口函数
LEAD函数用于获取当前行之后的第N行默认N为1的数据。 获取下一行的数据LEAD函数可以让你获取当前行之后的下一行的数据这在需要比较连续行数据时非常有用。 指定偏移量N除了默认的N1外你可以指定N的值例如LEAD(column, N)将获取当前行后第N行的column列数据。 处理最后几行的情况LEAD函数对于最后几行的处理方式取决于如何定义边界条件。有些实现可以通过设置默认值或指定边界行为来处理末尾行的情况。 示例SQL语法 SELECT id, value, LEAD(value) OVER (ORDER BY id) AS next_value
FROM table_name; LEAD函数用于获取按照id排序的下一行的value值。 LAG函数与LEAD相反它用于获取当前行之前的第N行N默认为1的数据。 获取前一行的数据LAG函数允许你获取当前行之前的上一行数据有时这对于计算差异或趋势分析很有帮助。 指定偏移量N与LEAD类似你可以指定N的值来获取当前行前第N行的数据。 处理第一行的情况LAG函数同样需要考虑边界条件通常可以通过设置默认值或者指定边界行为来处理第一行的情况。 示例SQL语法 SELECT id, value, LAG(value) OVER (ORDER BY id) AS prev_value FROM table_name; 用LAG函数来获取按照id排序的前一行的value值。 题目. - 力扣LeetCode 答案
SELECT id, case when id%21 then ifnull(lead(student,1)over(),student) else lag(student,1)over() end as student
FROM Seat 二、场景题来源牛客/力扣
2.1 每个商品的销售总额 WITHProductSales AS (SELECTp.name AS product_name,SUM(o.quantity) AS total_sales,p.categoryFROMproducts pJOIN orders o ON p.product_id o.product_idGROUP BYp.name,p.category)
SELECTproduct_name,total_sales,RANK() OVER (PARTITION BYcategoryORDER BYtotal_sales DESC) AS category_rank
FROMProductSales
ORDER BYcategory,category_rank;
2.2 每月交易 I -- 使用DATE_FORMAT函数将trans_date字段格式化为年-月格式并别名为month
-- 使用IF函数判断state字段是否为approved是则返回1用于计数否则返回NULL不计入总数
-- SUM计算每个分组中所有交易的总金额
-- count计算每个分组中的交易总数
select date_format(trans_date, %Y-%m) as month,country,count(*) as trans_count,count(if(state approved, 1, NULL)) as approved_count,sum(amount) as trans_total_amount,sum(if(state approved, amount, 0)) as approved_total_amount
from Transactions
group by month,country
. - 力扣LeetCode 参考常用的SQL语句大全总结-CSDN博客
SQL基础语法总结查询_sql 查询语法总结-CSDN博客