日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sql两个列值以下划线拼接得到一个新的列_面试必备sql知识点——MySQL基础

發布時間:2023/12/4 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql两个列值以下划线拼接得到一个新的列_面试必备sql知识点——MySQL基础 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在刷了上百道sql題后,發現所有的題目都是基于某一個或幾個知識點來做考察的,所以理清基礎的知識細節,才能在題目考察到任意知識點時,找到解決線索。

溫故而知新,學習在于總結,于是我再次對已經學習過的mysql的知識進行梳理,得到基礎和進階兩篇知識框架的總結。如果對你有幫助,建議點贊收藏!

本文是MySQL基礎知識的總結,主要涵蓋增、刪、改、查四個方面

內容大綱:

一、增

  • 創建數據庫:create database 數據庫名稱
create database taobao;
  • 創建表:create table 表名(列 格式 null設置,·····),主鍵設置:primary key (主鍵列)
CREATE TABLE ProductIns( product_id char(4) NOT NULL, product_name VARCHAR(100) NOT NULL, product_type VARCHAR(32) NOT NULL, sale_price INTEGER DEFAULT 0, purchase_price INTEGER , regist_date DATE, PRIMARY KEY (product_id));
  • 根據查詢創建新表:create table 表名 as select ·············
create table user_lc AS select count(DISTINCT user_id) as "第一天新增用戶數" from userbehavior where dates = '2017-11-25';
  • 創建新列:alter table 表名 add column 列名 格式
alter table lc_copy add column ListingId varchar(20);

二、刪(慎用)

  • 刪除數據庫:drop database 數據庫名稱
drop database school;
  • 刪除數據表:drop table 表名
drop table product;
  • 只刪數據不刪表:delete from 表名(指定條件:+ where)
delete from product where sale_price >=400

三、改

  • 修改表名:alter table 舊表名 rename to 新表名
alter table score rename to score2;
  • 向表中插入數據:insert into 表名(列名···)values(‘數據’,····)
INSERT INTO productins(id,name,type) VALUES('001','T恤衫','衣服');
  • 從其他表復制數據插入:insert 新表 (列名···)select 列名··from 舊表
insert into producttype(pr_type,sum_sale,sum_purchase) select pr_type,sum(sale),sum(purchase) from product group by type;
  • 修改列值:update 表名 set 列名 = 表達式

指定條件:+ where

多列更新:set 列名1 = 表達式,列名2= 表達式

update product set regist_date ='2009-10-10' where product_id ='008';

四、查(重點)

基本select

  • 某列:select 列名 from 表名
select id from score;
  • 全表:select * from 表名
select * from score;
  • 去重:select distinct 列名 from 表名
--查詢不同ID select distinct id from score;--統計不同ID個數 select count(distinct id) from score;--優化寫法 select count(*) from (select distinct id from score) as a

聚合

  • count/sum/avg/max/min
-- 統計最大/最小/平均薪水 select max(salary), min(salary),avg(salary) from employee

分組

  • group by
--查詢每個班平均成績 select avg(score) from student group by class;

篩選

  • where:指定行對應條件,不可用聚合函數
select score from student where id ='001';
  • having:指定組對應條件,可用聚合函數
select avg(score) from student group by class having avg(score)>80;

排序

  • order by

升序:Asc 降序:Desc

多個排序:order by 列名1,列名2(從左到右優先原則)

SELECT 學號,成績 from score2 ORDER BY 成績 Desc;

  • limit:從查詢結果中取出指定行

進階:

limit N:返回 N 條記錄

offset M:跳過 M 條記錄,M 默認為 0

limit M,N:跳過M條記錄,返回 N 條記錄

SELECT 學號,成績 from score2 ORDER BY 成績 Desc LIMIT 1,2;

表連接(重點)

兩張學生表:

左表

右表

join/ inner join:內連接,左表右表都匹配的記錄

SELECT a.id,年齡,性別 from student1 a join student2 b on a.id=b.id;

left join :左連接,以左表位置準,向右表匹配對應字段,有多條則逐次列出,無匹配,則顯示NULL。

SELECT a.id,年齡,性別 from student1 a LEFT JOIN student2 b on a.id=b.id;

right join :右連接,以右表位置準,向左表匹配對應字段,有多條則逐次列出,無匹配,則顯示NULL。

SELECT b.id,年齡,性別 from student1 a RIGHT JOIN student2 b on a.id=b.id;

outer / full join:全連接,包含兩個表全部連接結果,左、右表缺失的數據會顯示為NULL。

cross join:交叉連接 / 笛卡爾積,生成3X3結果的表格

SELECT a.id,年齡,性別 from student1 a CROSS JOIN student2 b;

表合并

合并兩表相同字段:

  • union:去重合并
  • union all:非去重合并

course

course2-- 去重合并 select * from course UNION SELECT * from course2;

-- 非去重合并 select * from course UNION ALL SELECT * from course2;

視圖

視圖是不保存實際數據的臨時表,相當于直接調用由select語句查詢結果,在實際工作中,視圖可以減少寫sql語句時的嵌套。

create view 視圖名稱 as + select··········

示例:如下圖,創建一個名為“用戶行為”的臨時表

create view 用戶行為 as select user_id,count(behavior)as 用戶行為總數, sum(if(behavior = 'pv',1,0))as 點擊量, sum(if(behavior = 'fav',1,0))as 收藏數, sum(if(behavior = 'cart',1,0))as 加購數, sum(if(behavior = 'buy',1,0))as 購買量 from userbehavior group by user_id;

后續可以直接寫sql語句調用該表

select sum(點擊量) as "總點擊量", sum(收藏數) as "總收藏數", sum(加購數) as "總加購數", sum(購買量) as "總購買量" from 用戶行為;

復雜查詢

  • 子查詢:也就是常說的嵌套,即將定義視圖的select語句直接用于from子句中。子查詢層數無上限。

scoreselect 學號 from (select * from score GROUP BY 學號)as a

  • 標量子查詢:返回1行1列結果的子查詢(可在select和where中使用)
-- 查詢高于平均成績的學號及對應信息 select * from score where 成績>(select avg(成績) from score);

  • 關聯子查詢:where中使用子查詢
SELECT 學號,課程號,成績 from score as s1 WHERE 成績>( SELECT avg(成績) FROM score as s2 -- 關聯條件,按課程號來對表分組,同一組的數據,與這一組的平均成績進行比較 WHERE s1.課程號 = s2.課程號 GROUP BY 課程號);

總結

以上是生活随笔為你收集整理的sql两个列值以下划线拼接得到一个新的列_面试必备sql知识点——MySQL基础的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。