SQL語句基礎

mysql dos常用命令

打開mysql服務

net start mysql

關閉mysql服務

net stop mysql

登陸mysql

mysql -u root -p 

連接到遠程主機上的mysql
假設遠程主機ip爲: 22.22.22.22 ,用戶名爲root ,密碼爲abcd123.則鍵入以下命令

mysql -h22.22.22.22 -u root -p abc123

退出mysql

exit

修改密碼
修改root 密碼

update user set password=password("sss") where user = "root";

打開數據庫

use datatable

顯示所有數據庫

show databases;

顯示數據庫mysql裏的所有表,先切入到數據庫(如use datatables),才能看到表

show tables;

顯示錶mysql數據庫中的user表的列信息

describe user;

數據庫創建

create  database db_name;

刪除數據庫

drop database db_name;刪除時可先判斷是否存在,drop database if exits db_name

建表

create table table_name(字段一 數據類型,字段二 數據類型);

添加數據 insert into 表名[(字段一,字段二)]value (值1,值2);
如果向表中的每一個字段都插入一個值,[]中括號裏面的可以不用寫

查詢表裏所有數據

select * from tbale;

更新指定數據

update table_name set 字段名 = '新值‘where id =1;

刪除表中數據

delete from table_name;

一次創建多個數據庫用戶

create user username identified by 'password' ,username2 identified by 'password'

用戶的權限控制
將某個庫中的某個表的控制權賦予某個用戶

grant all on db_name.table_name to user_name [indentified by 'password'];

表結構的修改
增加一個字段

alert table  table_name add column 字段名 字段類型 alter 某字段;

修改字段名稱

alter table table_name change 舊字段名 新字段名 新字段類型;

改表的名字

alter table table_name rename to new_table_name;

一次性清空表中的所有數據

truncate table table_name;

備份數據庫

mysqldump -h host -u root -p dbname >dbname_backup.sql

sql常用函數

“Websites” 表
±—±-------------±--------------------------±------±--------+
| id | name | url | alexa | country |
±—±-------------±--------------------------±------±--------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘寶 | https://www.taobao.com/ | 13 | CN |
| 3 | 菜鳥教程 | http://www.runoob.com/ | 4689 | CN |
| 4 | 微博 | http://weibo.com/ | 20 | CN |
| 5 | Facebook | https://www.facebook.com/ | 3 | USA |
| 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND |
±—±--------------±--------------------------±------±--------+
"access_log"表
±----±--------±------±-----------+
| aid | site_id | count | date |
±----±--------±------±-----------+
| 1 | 1 | 45 | 2016-05-10 |
| 2 | 3 | 100 | 2016-05-13 |
| 3 | 1 | 230 | 2016-05-14 |
| 4 | 2 | 10 | 2016-05-14 |
| 5 | 5 | 205 | 2016-05-14 |
| 6 | 4 | 13 | 2016-05-15 |
| 7 | 3 | 220 | 2016-05-15 |
| 8 | 5 | 545 | 2016-05-16 |
| 9 | 3 | 201 | 2016-05-17 |
±----±--------±------±-----------+

有用的 Aggregate 函數:

  • AVG() - 返回平均值
  • COUNT() - 返回行數
  • FIRST() - 返回第一個記錄的值
  • LAST() - 返回最後一個記錄的值
  • MAX() - 返回最大值
  • MIN() - 返回最小值
  • SUM() - 返回總和

AVG() - 返回平均值
下面的 SQL 語句選擇訪問量高於平均訪問量的 “site_id” 和 “count”:

SELECT site_id, count FROM access_log
WHERE count > (SELECT AVG(count) FROM access_log);

COUNT() - 返回行數

COUNT() 函數返回匹配指定條件的行數。適用於mysql,和Oracle
COUNT(DISTINCT column_name) 函數返回指定列的不同值的數目:

SELECT COUNT(DISTINCT column_name) FROM table_name;
MAX

下面的 SQL 語句從 “Websites” 表的 “alexa” 列獲取最大值:

SELECT MAX(alexa) AS max_alexa FROM Websites;
MIN

下面的 SQL 語句從 “Websites” 表的 “alexa” 列獲取最小值:

SELECT MIN(alexa) AS min_alexa FROM Websites;
SUM

下面的 SQL 語句查找 “access_log” 表的 “count” 字段的總數:

SELECT SUM(count) AS nums FROM access_log;
GROUP BY

GROUP BY 語句用於結合聚合函數,根據一個或多個列對結果集進行分組。

下面的 SQL 語句統計所有網站的訪問的記錄數:

SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;
HAVING 子句

在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與聚合函數一起使用。
HAVING 子句可以讓我們篩選分組後的各組數據。
下面的 SQL 語句統計所有網站的訪問的記錄數:

SELECT Websites.name,COUNT(access_log.aid) AS nums FROM access_log
LEFT JOIN Websites
ON access_log.site_id=Websites.id
GROUP BY Websites.name;

現在我們想要查找總訪問量大於 200 的網站,並且 alexa 排名小於 200。
我們在 SQL 語句中增加一個普通的 WHERE 子句:

SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
WHERE Websites.alexa < 200 
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;
UCASE() 函數

UCASE() 函數把字段的值轉換爲大寫。

下面的 SQL 語句從 “Websites” 表中選取 “name” 和 “url” 列,並把 “name” 列的值轉換爲大寫:

SELECT UCASE(name) AS site_title, url
FROM Websites;
LCASE() 函數

LCASE() 函數把字段的值轉換爲小寫。

下面的 SQL 語句從 “Websites” 表中選取 “name” 和 “url” 列,並把 “name” 列的值轉換爲小寫:

SELECT LCASE(name) AS site_title, url
FROM Websites;
MID() 函數

MID() 函數用於從文本字段中提取字符。

SELECT MID(column_name,start[,length]) FROM table_name;
下面的 SQL 語句從 “Websites” 表的 “name” 列中提取前 4 個字符:

SELECT MID(name,1,4) AS ShortTitle
FROM Websites;
LEN() 函數

LEN() 函數返回文本字段中值的長度。

SELECT name, LENGTH(url) as LengthOfURL
FROM Websites;
ROUND() 函數

ROUND() 函數用於把數值字段舍入爲指定的小數位數。
SELECT ROUND(column_name,decimals) FROM table_name;
decimals 必需。規定要返回的小數位數。

ROUND(X,D): 返回參數X的四捨五入的有 D 位小數的一個數字。如果D爲0,結果將沒有小數點或小數部分。

mysql> select ROUND(1.298, 1);         -> 1.3 mysql> select ROUND(1.298, 0);         -> 1
FORMAT() 函數
FORMAT() 函數用於對字段的顯示進行格式化。
SELECT FORMAT(column_name,format) FROM table_name;

column_name 必需,要格式化的字段。
format 必需,規定格式。

下面的 SQL 語句從 “Websites” 表中選取 name, url 以及格式化爲 YYYY-MM-DD 的日期:

SELECT name, url, DATE_FORMAT(Now(),'%Y-%m-%d') AS date
FROM Websites;

參考
快速查看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章