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

歡迎訪問 生活随笔!

生活随笔

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

数据库

MySQL基础部分总结

發布時間:2023/11/29 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL基础部分总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL

1、選擇數據庫

  • use dbname
  • show databases;
  • 2、數據表

  • show tables
  • mysql> show columns from customers;
  • mysql> desc customers;
  • 3、show 語句

  • show status
  • show create databases
  • show create table
  • show grants
  • 4、select 檢索

    4.1.1版本后不再區分大小寫,但是為了容易閱讀和調試,建議還是使用。

    mysql> select cust_name from customers; mysql> select cust_name cust_status from customers; mysql> select distinct vend_id from products; mysql> select prod_name from products limit 5; mysql> select prod_name from products limit 5,5; //分頁問題 從行0開始計數,limit5,5是從第5行開始(不包括第五行),取5行,結果是:6:10行 因為這個很容易引起誤解,所以MySQL5開始支持另一個語法:limit 4 offset 3,意思是從行3開始取4行,等同于limit 3,4

    4-1、排序數據

    //單個字段排序 mysql> select prod_name from products order by prod_name; //多個字段排序,如果第一個字段全部唯一則第二個字段就不會生效 mysql> select prod_id,prod_price,prod_name from products order by prod_price ,prod_name;

    4-2、指定排序方向

    • desc 降序
    • asc 升序-默認

    注意順序,from>ordrr by >limit

    mysql> select prod_id,prod_price,prod_name from products order by prod_price desc; mysql> select prod_id,prod_price,prod_name from products order by prod_price asc; mysql> select prod_price from products order by prod_price desc limit 1;

    5、where 條件

    相關操作符:

  • = 等于
  • <> 不等于
  • != 不等于
  • < 小于
  • > 大于
  • >= 大于或者等于
  • <= 小于或等于
  • between 兩者之間 and
  • and 的優先級大于or,需要處理or,則需要括號 mysql> select prod_price,prod_name from products where prod_price = 2.50; mysql> select prod_price,prod_name from products where prod_price between 5 and 10; // IS NULL mysql> select cust_id from customers where cust_email is null; 重點:空值檢查
    空值既是:NULL
    MySQL中判斷是否是空值的子句是: IS NULL

    example:

    mysql> select cust_id FROM customers where cust_email IS NULL; +---------+ | cust_id | +---------+ | 10002 | | 10005 | +---------+

    6、where 數據過濾

    (logical operator)邏輯操作符:and - or

    mysql> select prod_id,prod_price,prod_name from products where vend_id = 1003 and prod_price<= 10; mysql> select prod_id,prod_price,prod_name from products where vend_id = 1003 or vend_id = 1002;

    運算符優先級問題:
    下列SQL中實際先運行 vend_id = 1002 and prod_price >= 10;,再運行vend_id = 1003.因為and的優先級大于or,如果要按理想執行,加括號!

    mysql> select prod_id,prod_price,prod_name from products where vend_id = 1003 or vend_id = 1002 and prod_price >= 10; mysql> select prod_id,prod_price,prod_name from products where (vend_id = 1003 or vend_id = 1002 )and prod_price >= 10;

    6-1、 in操作符 (not in)

    mysql> select prod_id,prod_price,prod_name from products where vend_id in (1002,1003) order by prod_name;

    6-2、 or操作符

    mysql> select prod_id,prod_price,prod_name from products where vend_id not in (1002,1003) order by prod_name;

    7、用通配符過濾

    like 和 _ 的區別是后者只能匹配一個字符

    7-1、like

    **注意NULL 雖然似乎 % 通配符可以匹配任何東西,但有一個例
    外,即 NULL 。即使是 WHERE prod_name LIKE '%' 也不能匹配
    用值 NULL 作為產品名的行。**

    mysql> select prod_id,prod_price,prod_name from products where prod_name LIKE 'jet%';mysql> select prod_id,prod_price,prod_name from products where prod_name LIKE '%anv%';

    7-2、_

    mysql> select prod_id,prod_price,prod_name from products where prod_name LIKE '_ ton anvil';

    8、正則表達式

    like是匹配全部,REGEXP可以匹配全部和部分

    mysql> select prod_name from products where prod_name ='JetPack 1000'; +--------------+ | prod_name | +--------------+ | JetPack 1000 | +--------------+ 1 row in set (0.00 sec)mysql> select prod_name from products where prod_name REGEXP '1000'; +--------------+ | prod_name | +--------------+ | JetPack 1000 | +--------------+ 1 row in set (0.00 sec)

    默認不區分大小寫,需要區分大小寫binary

    mysql> select prod_name from products where prod_name REGEXP 'jetpack .000'; mysql> select prod_name from products where prod_name REGEXP binary 'JetPack .000';

    10、計算字段

  • concat 合并 講兩個字段合并成一個新的字段
  • mysql> select concat (vend_name , 'C',vend_country,')') from vendors order by vend_name; +-------------------------------------------+ | concat (vend_name , 'C',vend_country,')') | +-------------------------------------------+ | ACMECUSA) | | Anvils R UsCUSA) | | Furball Inc.CUSA) | | Jet SetCEngland) | | Jouets Et OursCFrance) | | LT SuppliesCUSA) | +-------------------------------------------+ 6 rows in set (0.00 sec)
  • rtrim (ltrim ,trim) 去掉空格
  • mysql> select concat (rtrim(vend_name) , 'C',vend_country,')') from vendors order by vend_name;
  • as 別名
  • mysql> select concat (rtrim(vend_name) , '(',rtrim(vend_country),')') as vend_title from vendors order by vend__name;
  • 計算
  • +、-、* 、\

    mysql> select quantity*item_price as expand_price from orderitems where order_num =20005;

    11、函數

  • trim、ltrim、rtrim 去掉空值
  • Upper 轉為大寫
  • mysql> select vend_name,upper(vend_name) as ven_name_upcase from vendors order by vend_name;

    11-2 時間函數

  • AddDate() 增加一個日期(天、周等)
  • AddTime() 增加一個時間(時、分等)
  • CurDate() 返回當前日期
  • CurTime() 返回當前時間
  • ==Date() 返回日期時間的日期部分==
  • DateDiff() 計算兩個日期之差
  • Date_Add() 高度靈活的日期運算函數
  • Date_Format() 返回一個格式化的日期或時間串
  • Day() 返回一個日期的天數部分
  • DayOfWeek() 對于一個日期,返回對應的星期幾
  • Hour() 返回一個時間的小時部分
  • Minute() 返回一個時間的分鐘部分
  • Month() 返回一個日期的月份部分
  • Now() 返回當前日期和時間
  • Second() 返回一個時間的秒部分
  • Time() 返回一個日期時間的時間部分
  • Year() 返回一個日期的年份部分
  • 取9月某一天的數據

    mysql> select cust_id,order_num from orders where Date(order_date) = '2005-09-01'; +---------+-----------+ | cust_id | order_num | +---------+-----------+ | 10001 | 20005 | +---------+-----------+ 1 row in set (0.00 sec)

    取9月整個月的訂單

    mysql> select cust_id,order_num from orders where Date(order_date) between '2005-09-01' and '2005-09-30'; +---------+-----------+ | cust_id | order_num | +---------+-----------+ | 10001 | 20005 | | 10003 | 20006 | | 10004 | 20007 | +---------+-----------+ 3 rows in set (0.00 sec)mysql> select cust_id,order_num from orders where Year(order_date) and month(order_date) = 9; +---------+-----------+ | cust_id | order_num | +---------+-----------+ | 10001 | 20005 | | 10003 | 20006 | | 10004 | 20007 | +---------+-----------+ 3 rows in set (0.00 sec)

    11-4 數值處理函數

  • Abs() 返回一個數的絕對值
  • Cos() 返回一個角度的余弦
  • Exp() 返回一個數的指數值
  • Mod() 返回除操作的余數
  • Pi() 返回圓周率
  • Rand() 返回一個隨機數
  • Sin() 返回一個角度的正弦
  • Sqrt() 返回一個數的平方根
  • Tan() 返回一個角度的正切
  • 11-5 聚集函數

  • AVG() 返回某列的平均值
  • COUNT() 返回某列的行數
  • MAX() 返回某列的最大值
  • MIN() 返回某列的最小值
  • SUM() 返回某列值之和
  • DISTINCT
  • mysql> select avg(prod_price) as avg_price from products;

    分組數據

    GROUP BY子句和HAVING子句

    mysql> select vend_id,count(*) as num_prods from products group by vend_id; +---------+-----------+ | vend_id | num_prods | +---------+-----------+ | 1001 | 3 | | 1002 | 2 | | 1003 | 7 | | 1005 | 2 | +---------+-----------+ 4 rows in set (0.00 sec)mysql> select vend_id,count(*) as num_prods from products group by vend_id with rollup; +---------+-----------+ | vend_id | num_prods | +---------+-----------+ | 1001 | 3 | | 1002 | 2 | | 1003 | 7 | | 1005 | 2 | | NULL | 14 | +---------+-----------+ 5 rows in set (0.00 sec) having
    唯一的差別是 WHERE過濾行,而HAVING過濾分組。WHERE在數據 分組前進行過濾,HAVING在數據分組后進行過濾 mysql> select vend_id,count(*) as num_prods from products group by vend_id having count(*)>=2; +---------+-----------+ | vend_id | num_prods | +---------+-----------+ | 1001 | 3 | | 1002 | 2 | | 1003 | 7 | | 1005 | 2 | +---------+-----------+ 4 rows in set (0.00 sec)mysql> select vend_id,count(*) as num_prods from products where prod_price>=10 group by vend_id having count(*)>=2; +---------+-----------+ | vend_id | num_prods | +---------+-----------+ | 1003 | 4 | | 1005 | 2 | +---------+-----------+ 2 rows in set (0.00 sec)mysql> select order_num ,sum(quantity*item_price) as ordertotal from orderitems -> group by order_num -> having sum(quantity*item_price) >= 50 -> order by ordertotal; +-----------+------------+ | order_num | ordertotal | +-----------+------------+ | 20006 | 55.00 | | 20008 | 125.00 | | 20005 | 149.87 | | 20007 | 1000.00 | +-----------+------------+ 4 rows in set (0.00 sec) 順序
    • select
    • from
    • where
    • group by
    • having
    • order by
    • limit

    12 子查詢

    mysql> select cust_id from orders where order_num in (select order_num from orderitems where prod_id ='TNT2'); +---------+ | cust_id | +---------+ | 10001 | | 10004 | +---------+

    15 連接表

    笛卡兒積(cartesian product)

    如果將兩個表同時作為數據源(from后的表名),不加任何的匹配條件,那么產生的結果集就是一個迪卡爾積。
    迪卡爾積的結果沒有意義,但是迪卡爾積是聯合查詢、連接查詢的基礎。

    1. 交叉連接 cross join

    使用表A中的1條記錄去表B中連接所有的記錄,就是笛卡爾積

    2. 內連接

    select 字段列表 from 表A 【inner】 join 表B ,匹配到的成功的記錄

    3. 外連接 分為左連接和右連接,

    左連接保留左邊的所有,右邊匹配到的部分

    4. using關鍵字

    在進行連接時,如果進行連接的兩個字段的名子相同,則可以使用using using('cid') 當前筆記出自 《MySQL必知必會》

    總結

    以上是生活随笔為你收集整理的MySQL基础部分总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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