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;

 

posted @ 2021-05-22 15:25  iamlinlong  阅读(162)  评论(0)    收藏  举报