検索
ホームページデータベースmysql チュートリアルMYSQL 構文の詳細な概要 (例付き)

MYSQL 構文の詳細な概要 (例付き)

Feb 15, 2019 pm 02:30 PM
mysqlの構文

この記事は、MYSQL 構文の詳細な概要 (例を含む) を提供します。必要な方は参考にしていただければ幸いです。

ユーザー管理

新しいユーザーとパスワードを作成します。foo は名前、123 はパスワード、locahost は固定アドレスです。login

# 以下为两种创建方式
CREATE USER foo@localhost IDENTIFIED BY ‘123’ 
insert into mysql.user(Host,User,Password) values("localhost","test",password("1234"));
#只要更改了用户及密码
flush privileges

ユーザー パスワードの設定と変更:

#以下为三种更改方式
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword')
#若果是当前登录用户
SET PASSWORD = PASSWORD('newpassword')
update mysql.user set password=password('newpassword') where User='username' and Host='host'
#只要更改了用户及密码
flush privileges

ユーザーの削除: <br>

Delete FROM user Where User=&#39;test&#39; and Host=&#39;localhost&#39;;
flush privileges;
# 删除用户的数据库
drop database testDB; 
# 删除账户及权限
drop user 用户名@ localhost;

認可:

GRANT INSERT,DELETE,UPDATE,SELECT ON databasename.tablename TO &#39;username&#39;
@&#39;host&#39;
flush privileges

説明:

(1)privileges - ユーザーの操作権限 (例: SELECT、INSERT、UPDATE <br> (2) データベース名 - データベース名、テーブル名 - テーブル名 すべてのデータベースおよびテーブルに対する対応する操作権限をユーザーに付与する場合は、# のように を使用して表現できます。 ##.* (3) 新しいユーザーを設定するかパスワードを変更した後、フラッシュ権限を使用して MySQL システム権限関連テーブルを更新する必要があります。そうしないと、アクセスが拒否されます。 <br>

権限の表示:

show grants for root@localhost;

  • 権限の削除:

  • # GRANT的反操作,去除权限
     REVOKE SELECT ON db_name.* TO name;
にログインします。リモート MySQL (ubuntu): mysql -h -P リモート ポート -u User-p パスワード

# 需远程ip和端口:10.10.101.111:30061  远程mysql的用户及密码
mysql -h 10.10.101.111 -P 30061 -u root -p 123456

MYSQL データ型

参考: http: //www.php.cn/mysql-tutorials-415213.html

Database

  • データベースの表示: SHOW DATABASES;

  • #データベースの作成: CREATE DATABASES db_name;
  • データベースの使用: USE db_name;
  • データベースの削除: DROP DATABASE db_name;
  • Set
  • データベース エンコーディング

    : 名前を設定 utf8;

  • Table

テーブルの作成:

CREATE TABLE table_name(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(60) NOT NULL,
score TINYINT UNSIGNED NOT NULL DEFAULT 0,PRIMARY KEY(id)
)ENGINE=InnoDB;//设置表的存储引擎,一般常用InnoDB和MyISAM;InnoDB可靠,支持事务;MyISAM高效不支持全文检索

    Set
  • テーブル エンコーディング

    :テーブル名を作成 (...) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  • テーブルのコピー: CREATE TABLE tb_name2 SELECT * FROM tb_name
  • 部分コピー: CREATE TABLE tb_names SELECT id,name FROM tb_namr;
  • 一時テーブルの作成: CREATE TEMPORARY TABLE tb_name ;
  • 一時テーブル: クライアントおよびサーバー セッションで特定のトランザクションを処理し、スペースを節約し、プライバシーを維持するために使用されます。 プロパティ


  • データベース内の使用可能なテーブルを表示します: SHOW TABLES;
  • テーブル構造の表示: DESCRIBE tb_name; または SHOW COLUMNS FROM tb_name;
  • テーブルの削除: DROP [ TEMPORARY ] TABLE [ IF EXISTS ] tb_name[ , tb_name2…….];
  • DROP TABLE IF EXISTS `db_school`,`Student`;
    テーブル エイリアス: SELECT a.title,a.content,u.username FROMarticle AS a, user AS u where a .aid=1 および a.uid=u.uid
  • テーブルの名前変更

    : RENAME TABLE name_old TO name_new; または ALTER TABLE name_old RENAME name_new;

  • テーブル構造を変更します: ALTER TABLE tb_name ADD[CHANGE, RENAME, DROP]
  • ALTER TABLE tb_name ADD COLUMN address varchar(80) NOT NULL;
    ALTER TABLE tb_name DROP address;
    ALTER TABLE tb_name CHANGE score score SMALLINT(4) NOT NULL;
  • Data

    データの挿入:
  • INSERT INTO tb_name(id,name,score) VALUES(NULL,'Zhang San',140 ),(NULL,'Zhang Si',178),(NULL,'Zhang Wu',134);



    : 複数のデータの直後にカンマを挿入します

  • 取得したデータを挿入します:
  • INSERT INTO tb_name(name,score) SELECT名前スコア FROM tb_name2;


  • データを更新
  • UPDATE tb_name SET スコア =180 WHERE id=2;

    UPDATE テーブル名 SET 列名=NewValue[WHERE 条件]

  • データの削除:
  • DELETE FROM tb_name WHERE id=3;


    #条件制御
where ステートメント:

SELECT * FROM tb_name WHERE id=3;

Group by <br>Group by description

GROUP BY と WHERE 結合クエリ:

列 a を選択、テーブル名から集計関数 where フィルター条件がフィルター条件を持つ列 a によってグループ化されます <br>組み合わせた場合一緒に、どこが最初になり、グループ別が最後になります。つまり、まず where を使用して select xx from xx のレコード セットをフィルターし、次に group by を使用してフィルターされた結果をグループ化し、have 句を使用してグループ化された結果をフィルターします: <br>
HAVING ステートメント。 <br>

SELECT * FROM tb_name GROUP BY score HAVING count(*)>2;

Having using


*上記 3 つの実践

:

再版: 使用状況分析による mysql グループ (詳細)

関連条件制御文字:

 =、>、<、<>、IN(1,2,3......)、BETWEEN a AND b、NOT
 AND 、OR
 Like()用法中      %  为匹配任意、  _  匹配一个字符(可以是汉字)
 IS NULL 空值检测 IS NOT NULL 
 IN   NOT IN  // 
 limit [offset,] N #如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1) : SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15

複数条件クエリ:

  • SELECT * FROM tb_name 
    WHERE id=1003 AND price<=10 
    # WHERE id=1003 OR price<=10 
    # WHERE id IN(1002,1003)
    # WHERE id NOT IN(1002,1003)
    # WHERE name like &#39;%huxx&#39;

  • グループ クエリ: グループ クエリ列ごとにグループ化
SELECT COUNT(
    ) FROM tb_name GROUP BY スコア HAVING COUNT(
  • )>1;

    注: 上記の条件には HAVING を使用し、GROUP BY 列で並べ替えます。 <br>
    Sort: ORDER BY column_name DESC|ASC; //データを降順および昇順に並べる

  •  SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC;

    MySQL の共通演算子

正規表現:

SELECT * FROM tb_name WHERE REGEXP '^[A-D]'

説明: 名前の先頭と一致するには「^」を使用します。 A ~ D の名前で始まるものを調べます * 正規表現の練習: 参考ブログ: MYSQL は正規表現を使用してデータをフィルタリングします

サブクエリ

where type subquery: (内部クエリを処理します)外部クエリの比較条件としての結果)

#不用order by 来查询最新的商品
select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods);
#取出每个栏目下最新的产品(goods_id唯一)
select cat_id,goods_id,goods_name from goods where goods_id in(select max(goods_id) from goods group by cat_id);
  • from型子查询: (把内层的查询结果供外层再次查询)

#先查出哪些同学挂科两门以上
select name,count(*) as gk from stu where score < 60 having gk >=2;
#以上查询结果,我们只要名字就可以了,所以再取一次名字
select name from (select name,count(*) as gk from stu having gk >=2) as t;
#找出这些同学了,那么再计算他们的平均分
select name,avg(score) from stu where name in (select name from (select name,count(*) as gk from stu having gk >=2) as t) group by name;
  • exists型子查询:(把外层查询结果拿到内层,看内层的查询是否成立)

#查询哪些栏目下有商品,栏目表category,商品表goods
select cat_id,cat_name from category where exists(select * from goods where goods.cat_id = category.cat_id);

MySQL函数

  • distinct : 去重  Select  player_id,distinct(task_id) from task; <br>distinct去除重复样本(多个字段)

  • select distinct Student.Sno,Sname from Student (另一种方式)

  • 字符串连接——CONCAT() <br>SELECT CONCAT(name,”==>”,score) FRON tb_name;

  • 数学函数: <br>AVG、SUM、MAX、MIN、COUNT

  • 文本处理函数: <br>TRIM、LOCATE、UPPER、LOWER、SUNSTRING

  • 运算符: <br>+、-、*、\

  • 时间函数: <br>DATE()、CURTIME()、DAY()、YEAR()、NOW()…..

JOIN详解

join 用于多表中字段之间的联系

... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona

JOIN 按照功能大致分为如下三类: <br>* INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录 <br>* LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录 <br>* RIGHT JOIN(右连接):与 LEFT JOIN 相反,取得右表(table2)完全记录,即是左表(table1)并无匹配对应记录

注意:mysql不支持Full join,不过可以通过UNION 关键字来合并 LEFT JOIN 与 RIGHT JOIN来模拟FULL join. <br>具体参考博客Mysql Join语法解析与性能分析

UNION规则

UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中:在多个 SELECT 语句中,对应的列应该具有相同的字段属性

SELECT column,... FROM table1  UNION [ALL] SELECT column,... FROM table2 ...
  • UNION 与 UNION ALL 的区别:  
    使用 UNION 时,MySQL 会把结果集中重复的记录删掉,而使用 UNION ALL ,MySQL 会把所有的记录返回,且效率高于 UNION <br>具体参考博客MySQL UNION 与 UNION ALL 语法与用法

视图

视图是从一个或多个表中导出来的表,是一种虚拟存在的表。数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中。 <br>背景:安全性、查询性能提高 <br> - 使操作简单化,可以对经常使用的查询定义一个视图,使用户不必为同样的查询操作指定条件 <br> - 增加数据的安全性,通过视图,用户只能查询和修改指定的数据。 <br> - 节省空间,内容是总是一致的话,那么我们不需要维护视图的内容,维护好真实表的内容,就可以保证视图的完整性了 <br> - 提高表的逻辑独立性,视图可以屏蔽原有表结构变化带来的影响 <br>工作机制:当调用视图的时候,才会执行视图中的sql,进行取数据操作。视图的内容没有存储,而是在视图被引用的时候才派生出数据。这样不会占用空间,由于是即时引用,视图的内容总是与真实表的内容是一致的。更新视图可以更新真实表。 <br>视图与数据库: 

视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变。 <br>视图的建立和删除只影响视图本身,不影响对应的基本表 <br>某些视图是可更新的。也就是说,可以在诸如UPDATE、DELETE或INSERT等语句中使用它们,以更新基表的内容。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。更具体地讲,如果视图包含下述结构中的任何一种,那么它就是不可更新的。 <br>视图中虽然可以更新数据,但是有很多的限制。一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,就可能会造成数据更新失败。

索引

  • 10W条数据,检索nickname=’css’ <br>

    • 一般:SELECT * FROM award WHERE nickname = ‘css’  :mysql需要扫描全表及扫描10W条数据找这条数据

    • 索引: 在nickname上建立索引,那么mysql只需要扫描一行数据

  • 索引分为单列索引(主键索引,唯索引,普通索引)和组合索引 <br>

    • 单列索引:一个索引只包含一个列,一个表可以有多个单列索引.

    • 组合索引:一个组合索引包含两个或两个以上的列

单列索引:

  • 普通索引,这个是最基本的索引 <br>ALTER table SC ADD INDEX Sno_Index(Sno); //注意符号,不是单引号 <br>注意: 字段:CHAR,VARCHAR,类型,索引:length可以小于字段的实际长度,如果是BLOB和TEXT类型就必须指定长度

  • 唯一索引: 唯一索引要求所有的类的值是唯一的,这一点和主键索引一样.但是它允许有空值 <br>create UNIQUE INDEX sname ON Student(Sname);

  • 主键索引,不允许有空值:  
    规则:int优于varchar,一般在建表的时候创建,最好是与表的其他字段不相关的列或者是业务不相关的列.一般会设为 int 而且是 AUTO_INCREMENT自增类型的

组合索引

一个表中含有多个单列索引不代表是组合索引,通俗一点讲 组合索引是:包含多个字段但是只有索引名称 <br>创建:CREATE INDEX Tno_Tname_index ON Teacher(Tno,Tname);

全文索引

文本字段上(text)如果建立的是普通索引,那么只有对文本的字段内容前面的字符进行索引,其字符大小根据索引建立索引时申明的大小来规定. <br>建立: ALTER TABLE tablename ADD FULLTEXT(column1, column2)

删除索引

DORP INDEX IndexName ON TableName

查看索引

show index from tblname;

这块参考博客细说mysql索引 ,写的很详细。 <br>索引原理:索引原理

存储

一组为了完成特定功能的SQL语句集,经过编译后存储在数据库中。当希望在不同应用程序或者平台上执行相同函数时,或封装特定功能时,存储过程是非常有用的。存储过程类似一个可编程函数。MySQL 中,单个 Store Procedure(SP) 不是原子操作,要使整个存储过程成为一个原子操作的办法是:在存储过程主体开始部分。 <br>注意:非事务导致存储过程没有原子性即过程有的成功有的失败,变为事务增加原子性,即使执行过程出错,出错前的操作将不会真正执行。http://www.cnblogs.com/fnlingnzb-learner/p/6861376.html

优点: <br>1. 执行速度快:存储过程会预编译,查询优化器会对其优化。 <br>2. 可多次调用及修改 <br>3. 功能灵活:可用流程控制语句编写,完成复杂运算 <br>4. 安全:设置存储过程权限,保证数据安全 <br>5. 减少流量:调用存储过程时,网络只传输此调用语句即可

语法

  • 结构: <br>CREATE PROCEDURE  过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 …] 过程体

DELIMITER //
  CREATE PROCEDURE myproc(OUT s int)
    BEGIN
      SELECT COUNT(*) INTO s FROM students;
    END
    //DELIMITER ;

解释:  
(1)分隔符:mysql默认“;”,“DELIMITER //”声明分隔符 ,最后“DELIMITER ;”还原分隔符 <br>(2)参数:输入、输出、输入输出参数{IN,OUT,INOUT} 具体参考mysql存储

  • 变量 <br>

  1. DECLARE局部变量: DECLARE var_name[,…] type [DEFAULT value]  
    要给变量提供一个默认值,请包含一个DEFAULT子句。值可以被指定为一个表达式,不需要为一个常数。如果没有DEFAULT子句,初始值为NULL。 局部变量的作用范围在它被声明的BEGIN … END块内

  2. 变量SET语句:SET var_name = expr [, var_name = expr] <br>被参考变量可能是子程序内声明的变量,或者是全局服务器变量

  3. SELECT … INTO 语句:SELECT col_name[,…] INTO var_name[,…] table_expr <br>把选定的列直接存储到变量

  • 基本常用函数:参考博客:Mysql存储过程 <br>

  • 字符串类:默认第一个字符下标为1,即参数position必须大于等于1 <br> <br>

    CHARSET(str) //返回字串字符集 
    CONCAT (string2 [,... ]) //连接字串 
    INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0 
    LCASE (string2 ) //转换成小写 
    LEFT (string2 ,length ) //从string2中的左边起取length个字符 
    LENGTH (string ) //string长度 
    LOAD_FILE (file_name ) //从文件读取内容 
    LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定开始位置 
    LPAD (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为length 
    LTRIM (string2 ) //去除前端空格 
    REPEAT (string2 ,count ) //重复count次 
    REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str 
    RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length 
    RTRIM (string2 ) //去除后端空格 
    STRCMP (string1 ,string2 ) //逐字符比较两字串大小, 
    SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符, 
    TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符 
    UCASE (string2 ) //转换成大写 
    RIGHT(string2,length) //取string2最后length个字符 
    SPACE(count) //生成count个空格

    <span style="font-family: " microsoft yahei sans gb helvetica neue tahoma arial sans-serif>数学类 </span><br>

    ABS (number2 ) //绝对值 
    BIN (decimal_number ) //十进制转二进制 
    CEILING (number2 ) //向上取整 
    CONV(number2,from_base,to_base) //进制转换 
    FLOOR (number2 ) //向下取整 
    FORMAT (number,decimal_places ) //保留小数位数 
    HEX (DecimalNumber ) //转十六进制 
    注:HEX()中可传入字符串,则返回其ASC-11码,如HEX(&#39;DEF&#39;)返回4142143 
    也可以传入十进制整数,返回其十六进制编码,如HEX(25)返回19 
    LEAST (number , number2 [,..]) //求最小值 
    MOD (numerator ,denominator ) //求余 
    POWER (number ,power ) //求指数 
    RAND([seed]) //随机数 
    ROUND (number [,decimals ]) //四舍五入,decimals为小数位数] 
    注:返回类型并非均为整数,如下文: 
    SIGN (number2 ) //

    日期时间类 

    ADDTIME (date2 ,time_interval ) //将time_interval加到date2 
    CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区 
    CURRENT_DATE ( ) //当前日期 
    CURRENT_TIME ( ) //当前时间 
    CURRENT_TIMESTAMP ( ) //当前时间戳 
    DATE (datetime ) //返回datetime的日期部分 
    DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间 
    DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime 
    DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间 
    DATEDIFF (date1 ,date2 ) //两个日期差 
    DAY (date ) //返回日期的天 
    DAYNAME (date ) //英文星期 
    DAYOFWEEK (date ) //星期(1-7) ,1为星期天 
    DAYOFYEAR (date ) //一年中的第几天 
    EXTRACT (interval_name FROM date ) //从date中提取日期的指定部分 
    MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串 
    MAKETIME (hour ,minute ,second ) //生成时间串 
    MONTHNAME (date ) //英文月份名 
    NOW ( ) //当前时间 
    SEC_TO_TIME (seconds ) //秒数转成时间 
    STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示 
    TIMEDIFF (datetime1 ,datetime2 ) //两个时间差 
    TIME_TO_SEC (time ) //时间转秒数] 
    WEEK (date_time [,start_of_week ]) //第几周 
    YEAR (datetime ) //年份 
    DAYOFMONTH(datetime) //月的第几天 
    HOUR(datetime) //小时 
    LAST_DAY(date) //date的月的最后日期 
    MICROSECOND(datetime) //微秒 
    MONTH(datetime) //月 
    MINUTE(datetime) //分返回符号,正负或0 
    SQRT(number2) //开平方

    游标

    定义:游动的标识,相对于普通的一次性查询给出所有结果;游标的作用就是对数据样本中一条一条分析处理,像个指针。 <br>使用: <br>1. 声明: declare 游标名 cursor for select_statement; <br>2. 打开: open 游标名 <br>3. 取值: fetch 游标名 into var1,var2[,…] <br>4. 关闭:close 游标名;

    事务

    Mysql事务主要用于处理操作量大,复杂度高的数据。例如:当你删除一样东西时,你得把它自身及所依赖的东西都要删除。所有这些操作行为形成一个事务。 <br>注意: <br> - MYSQL中:只有Innodb数据库引擎的数据库或表才支持事务 <br> - 事务处理用来维护数据库完整性即保证批量SQL语句全部执行或者全部不执行 <br> - 事务用来管理insert,update,delete语句 <br> 事务满足4个条件: <br> 1. 事务的原子性:要么成功,要么失败 <br> 2. 稳定性: 有非法数据,事务撤回 <br> 3. 隔离性: 事务独立运行 <br> 4. 可靠性:当发生奔溃,InnoDB数据表驱动会利用日志文件重构修改 <br> 参考博客事务

    导入导出

    • 导出整个数据库:mysqldump -u 用户名 -p 数据库名 > 导出的文件名

    • 导出一个表: mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

    • 导出一个数据结构: mysqldump -u dbuser -p -d –add-drop-table dbname >d:/dbname_db.sql  (-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table)

    • 导入数据库:

    use 数据库;
    source d:/dbname.sql;

    性能优化

    查询实例

    数据库题:学生表,选课表,课程表 设教学数据库中有三个基本表: <br>学生表 Student(Sno,Sname,Age,Sex),其属性表示学生的学号、姓名、年龄和性别; <br>选课表 SC(Sno,Cno,score),其属性表示学生的学号、所学课程的课程号和成绩; <br>课程表 Course(Cno,Cname,Tho),其属性表示课程号、课程名称和任课教师姓名; <br>教师表 Teacher (Tno,Tname),其属性表示教师号、教师名称; <br>下面的题目都是针对上述三个基本表操作的。 <br>*导入sql文件:source  course.sql;  sql文件编码格式:无BOM的UTF-8

    drop database IF EXISTS db_school;
    CREATE database db_school;
    use db_school;
    DROP TABLE IF EXISTS `db_school`.`Student`; 
    create table Student  
    (  
        Sno varchar(20),  
        Sname varchar(50), 
        Age smallint,
        Sex varchar(5),
        primary key (Sno)  
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
    
    DROP TABLE IF EXISTS `db_school`.`Course`;  
    create table Course  
    (  
        Cno varchar(20),  
        Cname varchar(50),    
        Tno varchar(20),  
        primary key (Cno)  
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
    DROP TABLE IF EXISTS `db_school`.`SC`;  
    create table SC  
    (  
        Sno varchar(20),  
        Cno varchar(20),      
        score int,  
        primary key (Sno,Cno)  
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
    
    DROP TABLE IF EXISTS `db_school`.`Teacher`;  
    create table Teacher  
    (  
        Tno varchar(20),  
        Tname varchar(50),    
        primary key (Tno)  
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
    INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES (&#39;001&#39;,&#39;陈一&#39;,25,&#39;nan&#39;);  
    INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES (&#39;002&#39;,&#39;郭二&#39;,20,&#39;nv&#39;);  
    INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES (&#39;003&#39;,&#39;张三&#39;,25,&#39;nv&#39;);  
    INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES (&#39;004&#39;,&#39;李四&#39;,22,&#39;nan&#39;);  
    INSERT INTO `Student`(Sno,Sname,Age,Sex) VALUES (&#39;005&#39;,&#39;王五&#39;,23,&#39;nan&#39;);  
    INSERT INTO `Teacher`(Tno,Tname) VALUES (&#39;001&#39;,&#39;张老师&#39;);  
    INSERT INTO `Teacher`(Tno,Tname) VALUES (&#39;002&#39;,&#39;王老师&#39;);  
    INSERT INTO `Teacher`(Tno,Tname) VALUES (&#39;003&#39;,&#39;钱老师&#39;);  
    INSERT INTO `Teacher`(Tno,Tname) VALUES (&#39;004&#39;,&#39;刘老师&#39;);  
    INSERT INTO `Teacher`(Tno,Tname) VALUES (&#39;005&#39;,&#39;胡老师&#39;);  
    INSERT INTO `Course`(Cno,Cname,Tno) VALUES (&#39;001&#39;,&#39;语文&#39;,&#39;张老师&#39;);  
    INSERT INTO `Course`(Cno,Cname,Tno) VALUES (&#39;002&#39;,&#39;数学&#39;,&#39;王老师&#39;);  
    INSERT INTO `Course`(Cno,Cname,Tno) VALUES (&#39;003&#39;,&#39;英语&#39;,&#39;钱老师&#39;);  
    INSERT INTO `Course`(Cno,Cname,Tno) VALUES (&#39;004&#39;,&#39;物理&#39;,&#39;刘老师&#39;);  
    INSERT INTO `Course`(Cno,Cname,Tno) VALUES (&#39;005&#39;,&#39;政治&#39;,&#39;胡老师&#39;);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;001&#39;,&#39;001&#39;,50);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;001&#39;,&#39;002&#39;,60);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;001&#39;,&#39;003&#39;,70);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;001&#39;,&#39;004&#39;,80);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;001&#39;,&#39;005&#39;,90);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;002&#39;,&#39;001&#39;,90);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;002&#39;,&#39;002&#39;,80);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;002&#39;,&#39;003&#39;,70);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;002&#39;,&#39;004&#39;,60);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;002&#39;,&#39;005&#39;,50);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;003&#39;,&#39;001&#39;,81);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;003&#39;,&#39;002&#39;,82);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;003&#39;,&#39;003&#39;,83);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;003&#39;,&#39;004&#39;,84);  
    INSERT INTO `SC`(Sno,Cno,score) VALUES (&#39;003&#39;,&#39;005&#39;,85);
    • 写出检索全是女同学选修的课程的课程号的SQL语句。

    select Cno  from Student,SC where Student.Sno=SC.Sno AND Student.Sex=&#39;nv&#39;;
    • 写出下列插入操作的SQL语句:把SC表中每门课程的平均成绩插入到另一个已存在的表SC_C(C#,CNAME, AVG_GRADE)中,其中 AVG_GRADE 为每门课程的平均成绩。

    # 先创建SC_C表,自行创建insert into SC_C select SC.Cno,Cname,AVG(score) AS Avg_score FROM Course,SC WHERE Course.Cno=SC.Cno GROUP BY SC.Cno;
    • 试写出下列删除操作的SQL语句:从SC表中把王老师的女学生选课元组删去。

    delete from SC where Sno in (select Sno from Student where Sex=&#39;nv&#39;) AND Cno in (select Cno from Course where Tno=&#39;王老师&#39;);
    • 查询“001”课程比“002”课程成绩高的所有学生的学号;

    select a.Sno from (select Sno,score FROM SC where Cno=&#39;001&#39;) AS a ,(select Sno,score FROM SC where Cno=&#39;002&#39;) AS  b  WHERE a.score > b.score;//当两个表存在相同列名时,用tablename.columnname指定列
    • 查询所有同学的学号、姓名、选课数、总成绩;

    select Student.Sno,Student.Sname,count(SC.Cno),sum(SC.score) from Student left OUTER join SC on Student.Sno=SC.Sno group by Student.Sno,Student.Sname;


    以上がMYSQL 構文の詳細な概要 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明
    この記事はCSDNで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
    MySQLはSQLiteとどのように違いますか?MySQLはSQLiteとどのように違いますか?Apr 24, 2025 am 12:12 AM

    MySQLとSQLiteの主な違いは、設計コンセプトと使用法のシナリオです。1。MySQLは、大規模なアプリケーションとエンタープライズレベルのソリューションに適しており、高性能と高い並行性をサポートしています。 2。SQLiteは、モバイルアプリケーションとデスクトップソフトウェアに適しており、軽量で埋め込みやすいです。

    MySQLのインデックスとは何ですか?また、パフォーマンスをどのように改善しますか?MySQLのインデックスとは何ですか?また、パフォーマンスをどのように改善しますか?Apr 24, 2025 am 12:09 AM

    MySQLのインデックスは、データの取得をスピードアップするために使用されるデータベーステーブル内の1つ以上の列の順序付けられた構造です。 1)インデックスは、スキャンされたデータの量を減らすことにより、クエリ速度を改善します。 2)B-Tree Indexは、バランスの取れたツリー構造を使用します。これは、範囲クエリとソートに適しています。 3)CreateIndexステートメントを使用して、createIndexidx_customer_idonorders(customer_id)などのインデックスを作成します。 4)Composite Indexesは、createIndexIDX_CUSTOMER_ORDERONORDERS(Customer_Id、Order_date)などのマルチコラムクエリを最適化できます。 5)説明を使用してクエリ計画を分析し、回避します

    データの一貫性を確保するために、MySQLでトランザクションを使用する方法を説明します。データの一貫性を確保するために、MySQLでトランザクションを使用する方法を説明します。Apr 24, 2025 am 12:09 AM

    MySQLでトランザクションを使用すると、データの一貫性が保証されます。 1)StartTransactionを介してトランザクションを開始し、SQL操作を実行して、コミットまたはロールバックで送信します。 2)SavePointを使用してSave Pointを設定して、部分的なロールバックを許可します。 3)パフォーマンスの最適化の提案には、トランザクション時間の短縮、大規模なクエリの回避、分離レベルの使用が合理的に含まれます。

    どのシナリオでMySQLよりもPostgreSQLを選択できますか?どのシナリオでMySQLよりもPostgreSQLを選択できますか?Apr 24, 2025 am 12:07 AM

    MySQLの代わりにPostgreSQLが選択されるシナリオには、1)複雑なクエリと高度なSQL関数、2)厳格なデータの整合性と酸コンプライアンス、3)高度な空間関数が必要、4)大規模なデータセットを処理するときに高いパフォーマンスが必要です。 PostgreSQLは、これらの側面でうまく機能し、複雑なデータ処理と高いデータの整合性を必要とするプロジェクトに適しています。

    MySQLデータベースをどのように保護できますか?MySQLデータベースをどのように保護できますか?Apr 24, 2025 am 12:04 AM

    MySQLデータベースのセキュリティは、以下の測定を通じて達成できます。1。ユーザー許可管理:CreateUSERおよびGrantコマンドを通じてアクセス権を厳密に制御します。 2。暗号化された送信:SSL/TLSを構成して、データ送信セキュリティを確保します。 3.データベースのバックアップとリカバリ:MySQLDUMPまたはMySQLPumpを使用して、定期的にデータをバックアップします。 4.高度なセキュリティポリシー:ファイアウォールを使用してアクセスを制限し、監査ロギング操作を有効にします。 5。パフォーマンスの最適化とベストプラクティス:インデックス作成とクエリの最適化と定期的なメンテナンスを通じて、安全性とパフォーマンスの両方を考慮に入れます。

    MySQLのパフォーマンスを監視するために使用できるツールは何ですか?MySQLのパフォーマンスを監視するために使用できるツールは何ですか?Apr 23, 2025 am 12:21 AM

    MySQLのパフォーマンスを効果的に監視する方法は? MySqladmin、ShowGlobalStatus、PerconAmonitoring and Management(PMM)、MySQL EnterpriseMonitorなどのツールを使用します。 1. mysqladminを使用して、接続の数を表示します。 2。showglobalstatusを使用して、クエリ番号を表示します。 3.PMMは、詳細なパフォーマンスデータとグラフィカルインターフェイスを提供します。 4.mysqlenterprisemonitorは、豊富な監視機能とアラームメカニズムを提供します。

    MySQLはSQL Serverとどのように違いますか?MySQLはSQL Serverとどのように違いますか?Apr 23, 2025 am 12:20 AM

    MySQLとSQLServerの違いは次のとおりです。1)MySQLはオープンソースであり、Webおよび埋め込みシステムに適しています。2)SQLServerはMicrosoftの商用製品であり、エンタープライズレベルのアプリケーションに適しています。ストレージエンジン、パフォーマンスの最適化、アプリケーションシナリオの2つには大きな違いがあります。選択するときは、プロジェクトのサイズと将来のスケーラビリティを考慮する必要があります。

    どのシナリオでMySQLよりもSQL Serverを選択できますか?どのシナリオでMySQLよりもSQL Serverを選択できますか?Apr 23, 2025 am 12:20 AM

    高可用性、高度なセキュリティ、優れた統合を必要とするエンタープライズレベルのアプリケーションシナリオでは、MySQLの代わりにSQLServerを選択する必要があります。 1)SQLServerは、高可用性や高度なセキュリティなどのエンタープライズレベルの機能を提供します。 2)VisualStudioやPowerbiなどのMicrosoftエコシステムと密接に統合されています。 3)SQLSERVERは、パフォーマンスの最適化に優れた機能を果たし、メモリが最適化されたテーブルと列ストレージインデックスをサポートします。

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    mPDF

    mPDF

    mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

    VSCode Windows 64 ビットのダウンロード

    VSCode Windows 64 ビットのダウンロード

    Microsoft によって発売された無料で強力な IDE エディター

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    PhpStorm Mac バージョン

    PhpStorm Mac バージョン

    最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強力な PHP 統合開発環境