1、正常查询:
SELECT column_name,column_name FROM table_name;
SELECT * FROM table_name;
2、去重查询:
SELECT DISTINCT column_name FROM table_name;
select distinct ID,AA,BB from tName
与
select distinct ID from tName
有什么区别??
有区别,前面的会选择唯一的一行。后面的选择唯一列。
前一种只要三个字段都不重复就取出来。后面只取唯一的ID;
https://www.cnblogs.com/haizine/p/5803051.html
3、where字句用于过滤记录
SELECT column_name,column_name FROM table_nameWHERE column_name operator value;
例如:SELECT * FROM Websites WHERE country='CN';
4、SQL AND & OR 运算符
AND & OR 运算符用于基于一个以上的条件对记录进行过滤。
SELECT * FROM Websites WHERE country='CN' AND alexa > 50;
5、SQL ORDER BY 关键字
RDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。
语法:SELECT column_name,column_name FROM table_name
ORDER BY column_name,column_name ASC|DESC;
如:SELECT * FROM Websites ORDER BY alexa;
6、UPDATE 语句用于更新表中已存在的记录。
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
注意:WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!
例如:UPDATE Websites SET alexa='5000', country='USA' WHERE name='菜鸟教程';
7、DELETE 语句用于删除表中的行。
DELETE FROM table_name WHERE some_column=some_value;
WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除。
8、LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行
mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.
9、LIKE 操作符:
用于在 WHERE 子句中搜索列中的指定模式。
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;
例如:SQL 语句选取 name 以字母 "G" 开始的所有客户:
SELECT * FROM Websites WHERE name LIKE 'G%';
10、SQL 通配符
在 SQL 中,通配符与 SQL LIKE 操作符一起使用。
SQL % 通配符:
SQL 语句选取 url 以字母 "https" 开始的所有网站:
SELECT * FROM Websites WHERE url LIKE 'https%';
SQL 语句选取 url 包含模式 "oo" 的所有网站:
SELECT * FROM Websites WHERE url LIKE '%oo%';
SQL _ 通配符:
SQL 语句选取 name 以一个任意字符开始,然后是 "oogle" 的所有客户:
SELECT * FROM Websites WHERE name LIKE '_oogle';
SQL 语句选取 name 以 "G" 开始,然后是一个任意字符,然后是 "o",然后是一个任意字符,然后是 "le" 的所有网站:
SELECT * FROM Websites WHERE name LIKE 'G_o_le';
使用 SQL [charlist] 通配符:
MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
SQL 语句选取 name 以 "G"、"F" 或 "s" 开始的所有网站:
SELECT * FROM Websites WHERE name REGEXP '^[GFs]';
SQL 语句选取 name 以 A 到 H 字母开头的网站:
SELECT * FROM Websites WHERE name REGEXP '^[A-H]';
SQL 语句选取 name 不以 A 到 H 字母开头的网站:
SELECT * FROM Websites WHERE name REGEXP '^[^A-H]';
11、IN 操作符
IN 操作符允许您在 WHERE 子句中规定多个值。
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...);
SQL 语句选取 name 为 "Google" 或 "菜鸟教程" 的所有网站:
SELECT * FROM Websites WHERE name IN ('Google','菜鸟教程');
12、SQL BETWEEN 操作符
BETWEEN 操作符用于选取介于两个值之间的数据范围内的值。
SQL 语句选取 alexa 介于 1 和 20 之间的所有网站:
SELECT * FROM Websites WHERE alexa BETWEEN 1 AND 20;
13、SQL 别名
列的 SQL 别名语法:
SELECT column_name AS alias_name FROM table_name;
例如:SELECT name AS n, country AS c FROM Websites;
SQL 语句中,我们把三个列(url、alexa 和 country)结合在一起,并创建一个名为 "site_info" 的别名:
SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info FROM Websites;
表的别名实例:
SELECT w.name, w.url, a.count, a.date FROM Websites AS w, access_log AS a
WHERE a.site_id=w.id and w.name="菜鸟教程";
14、 SQL INSERT INTO 语句
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name VALUES (value1,value2,value3,...);
第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);
例如:
INSERT INTO `access_log` (`aid`, `site_id`, `count`, `date`) VALUES ('10', '6', '111', '2016-03-09');
15、SQL 连接(INNER JOIN ):内连接:取交集
INNER JOIN 关键字在表中存在至少一个匹配时返回行。
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name=table2.column_name;
或者: SELECT column_name(s) FROM table1 JOIN table2
ON table1.column_name=table2.column_name;
例如:
SELECT Websites.name, access_log.count, access_log.date FROM Websites INNER JOIN access_log ON Websites.id=access_log.site_id ORDER BY access_log.count;
16、 LEFT JOIN 语法:左连接(左外连接):
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。
SELECT column_name(s) FROM table1 LEFT JOIN table2
ON table1.column_name=table2.column_name;
或者:
SELECT column_name(s) FROM table1 LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
17、RIGHT JOIN 关键字:右连接(右外连接):
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
或者:
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
18、FULL OUTER JOIN:满外连接:
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
例如:SELECT Websites.name, access_log.count, access_log.date FROM Websites
FULL OUTER JOIN access_log ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;
19、join总结:
A inner join B 取交集。
A left join B 取 A 全部,B 没有对应的值为 null。
A right join B 取 B 全部 A 没有对应的值为 null。
A full outer join B 取并集,彼此没有对应的值为 null。
对应条件在 on 后面填写
20、SQL UNION 操作符:
默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;
SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;
21:SELECT INTO 语句
通常有以下三种用法:
- SELECT...INTO var_list,将查询结果存储在变量中;
- SELECT...INTO OUTFILE 将查询结果写入一个文件,还可以指定列和行终止符以生成特定的输出格式。
- SELECT...INTO DUMPFILE 将单行数据写入文件,没有任何格式。
SELECT
...
...
[INTO OUTFILE 'file_name'
[CHARACTER SET charset_name]
export_options
| INTO DUMPFILE 'file_name'
| INTO var_name [, var_name]]
21、INSERT INTO SELECT 语句
INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。
我们可以从一个表中复制所有的列插入到另一个已存在的表中:
INSERT INTO table2 SELECT * FROM table1;
或者, 我们可以只复制希望的列插入到另一个已存在的表中:
INSERT INTO table2 (column_name(s)) SELECT column_name(s) FROM table1;
例如:
INSERT INTO Websites (name, country) SELECT app_name, country FROM apps WHERE id=1;
当然你可以使用以下语句来拷贝表结构及数据:
CREATE TABLE 新表 AS SELECT * FROM 旧表 ;
22、创建数据库:CREATE DATABASE dbname;
23、创建数据库中的表:
表由行和列组成,每个表都必须有个表名:
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
column_name 参数规定表中列的名称。
data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。
size 参数规定表中列的最大长度。
SQL 约束用于规定表中的数据规则。
约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。
SQL CREATE TABLE + CONSTRAINT 语法:
CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);
在 SQL 中,我们有如下约束:
- NOT NULL - 指示某列不能存储 NULL 值。
- UNIQUE - 保证某列的每行必须有唯一的值。
- PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK - 保证列中的值符合指定的条件。
- DEFAULT - 规定没有给列赋值时的默认值。
PRIMARY KEY 约束的实例 :
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 用法:(键的主要作用是:保持数据的一致性、完整性)
我们给表1加入一个外键,这个外键就是表2中的学号字段。那么这样表1就是主表,表2就是子表:
1、表1能够有一个或者多个外键,也能够没有。
2、这个外键能够不是表1的主键,但必须是子表的主键。
外键的使用规范
- 从表的字段必须与外键类型同样(如上。分数表 stu 的类型必须和学生表 sid 的类型同样,比方都是 int(10) 类型)
- 外键必须是主表的唯一键(如上。学生表 sid 是主键,而主键是唯一的。所以能够作为分数表 stu 的外键)
- 有关联的字段(如上,分数表之所以使用学生表的 sid 是由于两者有关联,分数表记录的是学生的分数,而学生能够用 sid 来唯 一标识)
- 避免使用复合键(也就是说从表能够同一时候引用多个外表的字段作为一个外键,一般不推荐这样的做法)
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)
)