Mysql基础(1)

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的主键,但必须是子表的主键。

外键的使用规范

  1. 从表的字段必须与外键类型同样(如上。分数表 stu 的类型必须和学生表 sid 的类型同样,比方都是 int(10) 类型)
  2. 外键必须是主表的唯一键(如上。学生表 sid 是主键,而主键是唯一的。所以能够作为分数表 stu 的外键)
  3. 有关联的字段(如上,分数表之所以使用学生表的 sid 是由于两者有关联,分数表记录的是学生的分数,而学生能够用 sid 来唯 一标识)
  4. 避免使用复合键(也就是说从表能够同一时候引用多个外表的字段作为一个外键,一般不推荐这样的做法)
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)
)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值