数据库知识小结

       文章用于个人学习,是对自己学习的简单小结,以便以后返回来学习。


1. 数据库基本操作

cd Users\mysql\bin
// cd到 mysql 数据库的 bin 文件中

mysql -hlocalhost -uroot -p
// 打开数据库
{
    mysql    应用
    -h       后跟的是主机域名
    -u       后跟的是 mysql 账户
    -p       后跟的是 mysql 密码
}

\q 
// 退出数据库

create database text default character set utf8 collate utf8_general_cli;
// 创建名为 text 的数据库,编码格式为 utf8,数据校对规则为 utf8_bin

show database;
// 查看数据库
 
use text;
// 选择 text 数据库

describe Student;
// 显示 Student 表的结构

create database text;
// 创建名为 text 的数据库

drop database text;
// 删除名为 text 的数据库

delete from Student;
// 清空 Student 表中的记录

set names utf8;
// 设置编码

update mysql.user set password=PASSWORD('123456') where User='root';
flush privileges;
// 修改 root 中的用户密码为 123456



2. 示例

create table `Student`
(
  `Snumber` int,
  `Sname` varchar(32),
  `Sage` int,
  `Ssex` varchar(8)
);
// 创建表 Student 

create table `Course`
(
  `Cnumber` int,
  `Cname` varchar(32),
  `Tnumber` int
);
// 创建表 Course 

create table `Score`
(
  `Snumber` int,
  `Cnumber` int,
  `Score` int
);
// 创建表 Score 

create table `Teacher`
(
  `Tnumber` int,
  `Tname` varchar(16)
);
// 创建表 Teacher 

desc Student;
// 查看表 Student

insert into Student select 1,'刘一',18,'男' union all
select 2,'钱二',19,'女' union all
select 3,'张三',17,'男' union all
select 4,'李四',18,'女' union all
select 5,'王五',17,'男' union all
select 6,'赵六',19,'女';
// Student 中插入 6 条数据

insert into Teacher select 1,'叶平' union all
select 2,'贺高' union all
select 3,'杨艳' union all
select 4,'周磊' union all
select 5,'杨哈哈';
// Teacher 中插入 5 条数据

insert into Score select 1,1,56 union all
select 1,2,78 union all
select 1,3,67 union all
select 1,4,58 union all
select 2,1,79 union all
select 2,2,81 union all
select 2,3,92 union all
select 2,4,68 union all
select 3,1,91 union all
select 3,2,47 union all
select 3,3,88 union all
select 3,4,56 union all
select 4,2,88 union all
select 4,3,90 union all
select 4,4,93 union all
select 5,1,46 union all
select 5,3,78 union all
select 5,4,53 union all
select 6,1,67 union all
select 6,2,67 union all
select 6,4,67;
// Score 中插入 21 条数据

select * from Student;
// 查看 Student 表



3. SQL 语法

一 SELECT 查询

--------------------------------------------------------------------------------

SELECT FROM
{
   SELECT column1, column2, ...
   FROM table_name;
}

SELECT * FROM table_name
提取 table_name 中所有数据

SELECT CustomerName, City FORM Customers
从 Customers 表中提取 CustomerName 和 City 列数据

SELECT Country FROM Customers
从 Customers 表中提取 Country 列数据

-------------------------------------------------------------------------------

SELECT DISTINCT FROM
{
   SELECT DISTINCT column1, column2, ...
   FROM table_name;
}

SELECT DISTINCT Company FROM Orders
从 Orders 表中提取 Company 列唯一不同的值
{
   表
     Company             Orderin
     IBM                 121
     W3C                 4564
     Apple               565
     W3C                 45

   SQL语句执行结果为
     Company
     IBM
     W3C
     Apple
}

--------------------------------------------------------------------------------

SELECT FROM WHERE
{
   SELECT column1, column2, ...
   FROM table_name
   WHERE condition;
}

SELECT * FROM Customers WHERE Country='Mexico';
从表 Customers 中提取所有 Country 属性为 Mexico 的元素的所有属性

SELECT * FROM Customers WHERE CustomerID=1;
从表 Customers 中提取所有 CustomerID 属性为 1 的元素的所有属性

--------------------------------------------------------------------------------

AND 与
{
   SELECT column1, column2, ...
   FROM table_name
   WHERE condition1 AND condition2 AND condition3 ...;
}

SELECT * FROM Customers WHERE Country='Germany' AND City='Berlin';
从表 Customers 中提取所有 Country 属性为 Germany 同时 City 属性为 Berlin 的元素的所有属性

--------------------------------------------------------------------------------

OR 或
{
   SELECT column1, column2, ...
   FROM table_name
   WHERE condition1 OR condition2 OR condition3 ...;
}

SELECT * FROM Customers WHERE City='Berlin' OR City='Munchen';
从表 Customers 中提取 City 属性为 Berlin 或 Munchen 的元素的所有属性

--------------------------------------------------------------------------------

NOT 非
{
   SELECT column1, column2, ...
   FROM table_name
   WHERE NOT condition;
}

SELECT * FROM Customers WHERE NOT Country='Germany';
从表 Customers 中提取所有 Country 属性不是 Germany 的元素的所有属性

--------------------------------------------------------------------------------

AND & OR
SELECT * FROM Customers WHERE Country='Germany' AND (City='Berlin' OR City='Munchen');
从表 Customers 表中提取所有 Country 属性为 Germany 同时 City 属性为 Berlin 或 Munchen 的元素的所有属性

--------------------------------------------------------------------------------

结合 AND,OR 和 NOT
SELECT * FROM  Customers WHERE NOT Country='Germany' AND NOT Country='USA';
从表 Customers 中提取所有 Country 属性不为 Germany 也不为 USA 的元素的所有属性

--------------------------------------------------------------------------------

SQL ORDER BY 排序
{
   SELECT column1, column2, ...
   FROM table_name
   ORDER BY column1, column2, ... ASC|DESC;
}

SELECT * FROM Customers ORDER BY Country;
从表 Customers 中提取所有元素的属性,并根据 Country 按照升序排序

SELECT * FROM Customers ORDER BY Country DESC;
从表 Customers 中提取所有元素的属性,并根据 Country 按照降序排序

SELECT * FROM Customers ORDER BY Country ASC, CustomerName DESC;
从表 Customers 中提取所有元素的属性,先根据 Country 按照升序排序,如果 Country 相同,则按照 CustomerName 降序排序

--------------------------------------------------------------------------------

二 INSERT 插入

--------------------------------------------------------------------------------

INSERT INTO (两种形式)
1.
{
   INSERT INTO table_name (column1, column2, column3, ...)
   VALUES (value1, value2, value3, ...);
}

2.
{
   INSERT INTO table_name
   VALUES (value1, value2, value3, ...);
}

前提条件:假设表中有 CustomerName, ContactName, Address, City, PotalCode, Country 这些行

INSERT INTO Customers (CustomerName, ContactName, Address, City, PotalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');
在表中插入新的一行

INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');
在表中插入新的一行,但新的一行只有 CustomerName, City, Country 这三行插入数据

第 2 种方式没有列名,需要按列表种列的顺序,写入对应的值。

--------------------------------------------------------------------------------

三 空值

--------------------------------------------------------------------------------

IS NULL 为空
{
  SELECT column_names
  FROM table_name
  WHERE column_name IS NULL;
}

SELECT LastName, FirstName, Address FROM Persons WHERE Address IS NULL;
从表 Persons 中提取出 Address 属性值没有的元素的 LastName, FirstName, Address 的值

IS NOT NULL 不为空
{
  SELECT column_names
  FROM table_name
  WHERE column_name IS NOT NULL;
}

SELECT LastName, FirstName, Address FROM Persons WHERE Address IS NOT NULL;
从表 Persons 中提取出 Address 属性值存在的元素的 LastName, FirstName, Address 的值

创建表时
SQL> CREATE TABLE CUSTOMERS{
   ID  INT             NOT NULL,
   NAME  VARCHAR (20)  NOT NULL,
   AGT  INT            NOT NULL,
   ADDRESS  CHAR (25),
   SALARY  DECIMAL (18, 2),
   PRIMARY  KEY (ID)
};
该表中前三列的数据必须填写,不能为空,后三列的数据可以为空

--------------------------------------------------------------------------------

四 UPDATE 更新

--------------------------------------------------------------------------------

SQL UPDATE
{
   UPDATE table_name
   SET column1 = value1, column2 = value2, ...
   WHERE condition;
}

UPDATE Customers SET ContactName = 'Alfred Schmidt', City = 'Frankfurt' WHERE CustomerID = 1;
更新表 Customers 中所有 CustomerID 为 1 的元素的属性,将 ContactName 改为 Alfred Schmidt, City 改为 Frankfurt

UPDATE Customers SET ContactName = 'Juan';
省略了 WHERE 语句则将表中所有元素的 ContactName 改为 Juan

--------------------------------------------------------------------------------

五 DELETE 删除

--------------------------------------------------------------------------------

SQL DELETE
{
  DELETE FROM table_name
  WHERE condition;
}

DELETE FROM Customers WHERE CustomerName = 'Alfreds Futterkiste';
删除表中 CustomerName 为 Alfreds Futterkiste 的元素

DELETE FROM table_name; 或者 DELETE * FROM table_name;
删除表中所有元素,但表的结构任然保存

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

限制提取数量在 MyAQL 中是 LIMIT, Oracle 中用 ROWNUM

LIMIT
{
   SELECT column_name(s)
   FROM table_name
   WHERE condition
   LIMIT number
}

SELECT * FROM Persons LIMIT 5;
提取表中前五条元素的数据

SELECT * FROM Customers WHERE Country='Germany' LIMIT 3;
提取表中所有 Country 为 Germany 的前三条数据

SELECT * FROM table LIMIT 5, 10;
提取表中 6~15 行的所有数据

SELECT * FROM table LIMIT 95, -1;
提取表中第 94 行数据

Oracle
{
   SELECT column_name(s)
   FROM table_name
   WHERE ROWNUM <= number;
}

SELECT * FROM Persons WHERE ROWNUM <= 5;
提取表中前五条元素的数据

SELECT * FROM Customers WHERE Country='Germany' AND ROWNUM <= 3;
提取表中所有 Country 为 Germany 的前三条数据

SELECT * FROM table WHERE ROWNUM = 3;
提取表中第 3 条数据

--------------------------------------------------------------------------------

SQL LIKE(模糊查询)
{
   SELECT column1, column2, ...
   FROM table_name
   WHERE columnN LIKE pattern;
}
LIKE 不区分大小写

SELECT * FROM Customers WHERE CustomerName LIKE 'a%';
提取所有 CustomerName 属性中以 a 开头的一行数据

SELECT * FROM Customers WHERE CustomerName LIKE '%a';
提取所有 CustomerName 属性中以 a 结尾的一行数据

SELECT * FROM Customers WHERE CustomerName LIKE '%or%';
提取所有 CustomerName 属性中包含有 or 的一行数据

SELECT * FROM Customers WHERE CustomerName LIKE '_r%';
提取所有 CustomerName 属性中第二个字符为 r 的一行数据

SELECT * FROM Customers WHERE CustomerName LIKE 'a_%_%';
提取所有 CustomerName 属性中以 a 开头且至少三个字符长度的一行数据

SELECT * FROM Customers HWERE CustomerName LIKE 'a%o';
提取所有 CustomerName 属性中以 a 开头 o 结尾的一行数据

SELECT * FROM Customers WHERE CustomerName NOT LIKE 'a%';
提取所有 CustomerName 属性中不以 a 开头的一行数据

--------------------------------------------------------------------------------
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,916评论 2 89
  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,716评论 0 44
  • 需要原文的可以留下邮箱我给你发,这里的文章少了很多图,懒得网上粘啦 1数据库基础 1.1数据库定义 1)数据库(D...
    极简纯粹_阅读 7,417评论 0 46
  • 原文:闾阎扑地,钟鸣鼎食之家 闾阎:里巷、民间。闾,篆字从门从吕(民居),周代5家为比,5比为闾(侣),比邻的出处...
    李炜微言阅读 373评论 0 3