sql
一查表
SELECT name,country FROM Websites;
SELECT * FROM Websites;
二区分不同的字段
SELECT DISTINCT country FROM Websites;选择不同的国家从表里
三条件where查询
SELECT * FROM Websites WHERE country='CN'; 条件用where
SELECT * FROM Websites WHERE country='CN' AND alexa > 50;筛选条件带着运算,且或非
四排序order
SELECT * FROM Websites ORDER BY alexa; order不写的话是自动asc,降序需要desc
SELECT * FROM Websites ORDER BY country,alexa;并非按照数字,按照国家的升序排列

五表格中插入数据insert into
INSERT INTO table_name
VALUES (value1,value2,value3,...);
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
INSERT INTO Websites (name, url, alexa, country) VALUES ('百度','https://www.baidu.com/','4','CN');

insert into 表名(列名1,列名2,。。)values(‘’,‘’,‘’)
六表格中更新数据update 一定带着where
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
+----+--------------+---------------------------+-------+---------+
| 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 |
+----+--------------+---------------------------+-------+---------+
UPDATE Websites set alexa=‘5000’,country=‘USA’ WHERE name=‘菜鸟教程’;
七删除表中的行、
DELETE FROM table_name
WHERE some_column=some_value;
+----+--------------+---------------------------+-------+---------+
| 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 |
+----+--------------+---------------------------+-------+---------+
假设我们要从 "Websites" 表中删除网站名为 "Facebook" 且国家为 USA 的网站。
DELETE FROM Websites where name='facebook' AND country=‘USA’;
DELETE FROM Websites WHERE name='Facebook' AND country='USA';
在不删表的情况下删除所有数据 且保留表的格式
select * from Websites;
八不知道表数据数量的情况下查看表的前两条数据
SELECT * FROM Websites LIMIT 2;
九查看表的结构部
DESC+表名;
十搜索指定格式LIKE
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
+----+--------------+---------------------------+-------+---------+ | 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 | +----+---------------+---------------------------+-------+---------+
下面的 SQL 语句选取 name 以字母 "G" 开始的所有客户
SELECT * FROM Websites where name LIKE 'G%';
K结尾
‘%K’;
中间包含oo
‘%oo%’;
代替其中一个字符用
SELECT *FROM Websites WHERE name='Goo-le';
下面的 SQL 语句选取 url 以字母 "https" 开始的所有网站:
SELECT * FROM Websites
WHERE url LIKE 'https%';
十条件查找指定的数值 IN
IN 操作符允许您在 WHERE 子句中规定多个值。
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
SELECT *FROM Websites WHERE alexa in(1,13);
十一 查找范围内的数值 BETWEEN
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
不在这个范围的的用not between
下面的 SQL 语句选取 alexa 介于 1 和 20 之间但 country 不为 USA 和 IND 的所有网站:
SELECT *FROM Websites WHERE (alexa BETWEEN 1 AND 20 ) AND country NOT IN(USA,IND);
十二 为字段指定别名
SELECT column_name AS alias_name
FROM table_name; 列的别名
SELECT column_name(s)
FROM table_name AS alias_name;表的别名

十三 把列名结合在一起创建一个新的别名

十四 JOIN把两个或多个表的行连接起来
LEFT JOIN RIGHT JOIN
INNER JOIN OUTER JOIN
INNER JOIN 关键字在表中存在至少一个匹配时返回行。
+----+--------------+---------------------------+-------+---------+ | 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 | +----+---------------+---------------------------+-------+---------+
+-----+---------+-------+------------+ | 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 | +-----+---------+-------+------------+
请注意,"Websites" 表中的 "id" 列指向 "access_log" 表中的字段 "site_id"。上面这两个表是通过 "site_id" 列联系起来的

十五 LEFT JOIN
关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL

Websites.id有个7,而对应的access-log.site_id没有7的时候,显示左边的id=7的,但是右边没有的count和date都是0.
SELECT Websites.name,access-log on Websites.id=access-log.site_id order by access-log.count DESC;
十六sql union来连接量个查询结果
当允许value重复的话 使用union all 来连接,union一般都连接

如果是union all

十七 创建备份文件
SELECT * INTO NEWTABLE FROM Websites
只复制一些列到新表中
SELECT name,id INTO NEWTABALE FROM Websites;
带条件的复制 国家为‘CN’的列
SELECT INTO NEWTABLES FROM Websites WHERE country = ‘CN’;
复制多个表的数据插入到一个新的表中
SELECT Websites.name, access_log.count, access_log.date
INTO WebsitesBackup2016
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id;
Mysql数据库不支持 SELECT INTO
CREATE TABLE 新表
AS
SELECT * FROM 旧表 可以用这个拷贝数据以及表结构
只复制表的结构
create table table_name_new like table_name_old
十八创建备份数据到另一个已经存在的表中
INSERT INTO table2
SELECT * FROM table1;
复制表数据如果两个表的结构不一样
insert into table_name_new(column1,column2...) select column1,column2... from table_name_old
十九 创建数据库
CREATE database 库名
二十创建表
现在我们想要创建一个名为 "Persons" 的表,包含五列:PersonID、LastName、FirstName、Address 和 City。
我们使用下面的 CREATE TABLE 语句:
CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
带约束条件创建表 包括非空 primary key
- NOT NULL - 指示某列不能存储 NULL 值。
- UNIQUE - 保证某列的每行必须有唯一的值。
- PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK - 保证列中的值符合指定的条件。
- DEFAULT - 规定没有给列赋值时的默认值。
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (Id_P) //PRIMARY KEY约束 ) CREATE TABLE Persons ( Id_P int NOT NULL PRIMARY KEY, //PRIMARY KEY约束 LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
foreign key 的使用
create table if not exists per(
id bigint auto_increment comment '主键',
name varchar(20) not null comment '人员姓名',
work_id bigint not null comment '工作id',
create_time date default '2021-04-02',
primary key(id),
foreign key(work_id) references work(id)
)
create table if not exists work(
id bigint auto_increment comment '主键',
name varchar(20) not null comment '工作名称',
create_time date default '2021-04-02',
primary key(id)
)
二十一修改表的ALERT
添加列:
ALTER TABLE table1
ADD column_name varchar(4)
删除列:
ALTER TABLE table1
DROP COLUMN column_name
修改列数据类型:
ALTER TABLE table1
ALTER COLUMN column_name varchar(20)
增加表的约束
ALTER TABLE Persons
ADD UNIQUE (P_Id)
撤销约束
ALTER TABLE Persons
DROP INDEX uc_PersonID
CHECK约束
CHECK约束限制字段的值为特定的范围或者为特定的值
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)
增加CHECK约束
alert table add check (id>0 AND name= ‘Student’);
删除约束
alert table drop check chk_Person;
DEFAULT 约束
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
添加索引
二十二 删除表的数据但是不删除表的结构
TRUNCATE TABLE table_name
auto-increment
二十三 having函数
having 可以和聚合函数一起使用来筛选条件
SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log INNER JOIN Websites ON access_log.site_id=Websites.id) GROUP BY Websites.name HAVING SUM(access_log.count) > 200;


浙公网安备 33010602011771号