目录
5.18.聚合函数(avg(),count(),max(),min(),sum())
前言
结构化查询语言(Structured Query Language)简称SQL
一、mysql的安装和查看
1.1安装mysql服务端:sudo apt-get install mysql-server
1.2安装mysql客户端:sudo apt-get install mysql-client
1.3查看mysql进程:ps -ef |grep mysqld
1.4查看mysql端口:netstat -an |grep 3306
1.5登录本机mysql:mysql -u root -p
1.6登录远程mysql:mysql -h 127.0.0.1 -u root -p
1.7导入sql文件:source /home/abc/abc.sql;
二、SQL命令
1.show查看数据库/表格目录
1.1查看mysql中有多少数据库:show databases;
1.2.查看数据库中有多少表格:show tables;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.04 sec)
2.use/select切换/查看当前数据库
2.1切换/选择数据库:use databasename;
2.2查看当前数据库名称:select database();
mysql> use sys
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| sys |
+------------+
1 row in set (0.00 sec)
3.desc查看表结构
查看表结构:desc tablename;
mysql> desc session;
+------------------------+------------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+------------------------------------------+------+-----+---------+-------+
| thd_id | bigint(20) unsigned | NO | | NULL | |
| conn_id | bigint(20) unsigned | YES | | NULL | |
| user | varchar(128) | YES | | NULL | |
....
....
4.create创建数据库/表格/视图/索引
4.1.创建数据库-适配中文
create database databasename default chartset utf8;
CREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
-- "COLLATE utf8_general_ci",大致意思是在排序时根据utf8变码格式来排序--适配中文
4.2.创建表格
create table tablename(
列名(字段) 数据类型,主键,约束,
列名(字段) 数据类型,
......
列名(字段) 数据类型
);
create table my_table (name varchar(20) not null default '');
Query OK, 0 rows affected (0.36 sec)
--创建的表格,默认是utf8编码,创建表格已default utf8适配中文
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
Query OK, 0 rows affected (0.41 sec)
4.3.添加索引
您可以在表中创建索引,以便更加快速高效地查询数据。
用户无法看到索引,它们只能被用来加速搜索/查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name) --普通索引
CREATE UNIQUE INDEX index_name
ON table_name (column_name) --唯一索引
CREATE INDEX PersonIndex
ON Person (LastName) --创建索引,名为 "PersonIndex",在 Person 表的 LastName 列:
CREATE INDEX PersonIndex
ON Person (LastName DESC) --以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC:
CREATE INDEX PersonIndex
ON Person (LastName, FirstName) --索引不止一个列,括号中列出这些列的名称,用逗号隔开:
4.4.创建视图
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products) --创建视图
SELECT * FROM [Products Above Average Price] --查询视图
4.5.AUTO_INCREMENT字段
每次插入新记录时,自动地创建主键字段的值。
CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
5.select检索数据
5.1基础语法
select 列名称 from 表名称
select FirstName from NameTable --单列
select FirstName,SecondName from NameTable --多列
select * from NameTable --所有列
5.2.distinct去重
语法:select distinct 列名称 from 表名称
select Company from Orders --未去重
select distinct Company from Orders --去重
5.3.where条件子句
语法:select 列名称 from 表名称 where 列名称 操作符 值
select FirstName from NameTable where FirstName=‘Li’
select FirstName from NameTable where Age>20
select FirstName from NameTable where Age between 'Li' and 'Zhang'
5.4.and和or运算符
涵义:AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。解释如字面意思
select FirstName from NameTable where SecondName='Xiu' and LastName='Chou'
select FirstName from NameTable where SecondName='Xiu' or SecondName='Liu'
5.5.order by排序
ORDER BY 语句用于根据指定的列对结果集进行排序,默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,可以使用 DESC 关键字。多列排序仅在第一个列名有多个值时,才会按第二列排序,如果值都是唯一的,则不会按第二个列排序
SELECT Company, OrderNumber FROM Orders ORDER BY Company --单列排序
SELECT Company, OrderNumber FROM Orders ORDER BY Company,Number --多列排序
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC,Name --降序,DESCENDING
SELECT company, OrderNumber FROM Orders ORDER BY ASC --升序,默认即是,可省略
SELECT company, OrderNumber FROM Orders ORDER BY 2,3 --按列位置排序
--DESC关键字只应用到直接位于其前面的列名,即Name列仍是以升序排列,即需要特定指定才会以降序排序:
SELECT Compamy,OrderNumber FROM Orders ORDER BY Company DESC,Name DESC
5.6.limit/top/rownum限制行数
mysql:SELECT column_name(s) FROM table_name LIMIT number
oracle:SELECT column_name(s) FROM table_name WHERE ROWNUM <= number
SQL server:SELECT TOP number|percent column_name(s) FROM table_name
SELECT * FROM Persons LIMIT 5 --只显示前5行数据
SELECT * FROM Persons LIMIT 1,2 --显示2和3行
SELECT * FROM Persons DESC LIMIT 1 --显式最后一行,同LAST语句
SELECT * FROM Persons ORDER BY Peple_id DESC LIMIT 5 --显式后5行
SELECT * FROM Persons WHERE ROWNUM <= 5 --只显示前5行数据
SELECT TOP 2 * FROM Persons --只显示前2行
SELECT TOP 50 PERCENT * FROM Persons --显式50%行的数据
5.7.like模糊查询和通配符
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式,在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。
SQL 通配符必须与 LIKE 运算符一起使用。语法:
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
通配符 | 描述 |
---|---|
% | 替代一个或多个字符,区分大小写,且不匹配空值 |
_ | 仅替代一个字符 |
[charlist |