mysql的基礎(chǔ)語句和外鍵查詢及其語句詳解(推薦)
思路:雙指針?biāo)悸房梢詥?,我就直接找G,如果后一個是1就cnt++,如果不是數(shù)字,用一個指針i指向G,另一個指針j移動,當(dāng)不是G時停止,統(tǒng)計G的個數(shù),如果是奇數(shù)個同時G的下一個是1,cnt++,如果為偶數(shù)同時G的下一個是1,就用那唯一一次機會G的國特抵消一次,cnt++,此后不再對偶數(shù)個G進行cnt++,同時把i移動到j(luò)指向G位置,就這樣一直遍歷字符串;
s = input() cnt = 0 king_used = False i = 0 while i < len(s): if s[i] == 'G': if i + 1 < len(s): if s[i + 1] == '1': cnt += 1 i += 2 continue elif s[i + 1] in ['2', '3']: i += 2 continue else: j = i + 1 while j < len(s) and s[j] == 'G': j += 1 g_count = j - i if g_count % 2 == 1: cnt += 1 elif g_count % 2 == 0 and not king_used: cnt += 1 king_used = True i = j else: i += 1 else: i += 1 print(cnt) 轉(zhuǎn)c++
我不知道為啥我c++代碼過不了,但是python嫩果
一、MySQL 基礎(chǔ)語句
1. 數(shù)據(jù)庫操作 創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE school_db;
刪除數(shù)據(jù)庫
DROP DATABASE school_db;
選擇數(shù)據(jù)庫
USE school_db;
2. 表操作 創(chuàng)建表
CREATE TABLE students ( student_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT, gender ENUM('男', '女'), enrollment_date DATE DEFAULT CURRENT_DATE );
刪除表
DROP TABLE students;
修改表結(jié)構(gòu)
ALTER TABLE students ADD COLUMN email VARCHAR(100); ALTER TABLE students MODIFY COLUMN age TINYINT; ALTER TABLE students DROP COLUMN gender;
3. CRUD 操作
插入數(shù)據(jù)
INSERT INTO students (name, age, gender) VALUES ('張三', 18, '男'), ('李四', 19, '女');
查詢數(shù)據(jù)
-- 基本查詢 SELECT * FROM students; -- 條件查詢 SELECT name, age FROM students WHERE age > 18; -- 排序 SELECT * FROM students ORDER BY age DESC; -- 分組 SELECT gender, COUNT(*) FROM students GROUP BY gender; -- 分頁 SELECT * FROM students LIMIT 5 OFFSET 0; -- 第一頁,每頁5條
更新數(shù)據(jù)
UPDATE students SET age = 20 WHERE name = '張三';
刪除數(shù)據(jù)
DELETE FROM students WHERE student_id = 1;
二、外鍵與關(guān)聯(lián)查詢
1. 外鍵概念
外鍵(Foreign Key)用于建立表與表之間的關(guān)聯(lián)關(guān)系,確保數(shù)據(jù)完整性。
2. 創(chuàng)建帶外鍵的表
-- 班級表 CREATE TABLE classes ( class_id INT AUTO_INCREMENT PRIMARY KEY, class_name VARCHAR(50) NOT NULL, teacher VARCHAR(50) ); -- 學(xué)生表(帶外鍵) CREATE TABLE students ( student_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT, class_id INT, FOREIGN KEY (class_id) REFERENCES classes(class_id) ON DELETE SET NULL ON UPDATE CASCADE );
3. 外鍵約束選項
ON DELETE CASCADE
: 主表記錄刪除時,從表相關(guān)記錄自動刪除
ON DELETE SET NULL
: 主表記錄刪除時,從表外鍵設(shè)為NULL
ON DELETE RESTRICT
: 拒絕刪除主表記錄(默認)
ON UPDATE CASCADE
: 主表主鍵更新時,從表外鍵同步更新
4. 關(guān)聯(lián)查詢
內(nèi)連接(INNER JOIN)
SELECT s.name, s.age, c.class_name FROM students s INNER JOIN classes c ON s.class_id = c.class_id;
左連接(LEFT JOIN)
SELECT s.name, c.class_name FROM students s LEFT JOIN classes c ON s.class_id = c.class_id;
右連接(RIGHT JOIN)
SELECT s.name, c.class_name FROM students s RIGHT JOIN classes c ON s.class_id = c.class_id;
全連接(FULL JOIN) - MySQL通過UNION實現(xiàn)
SELECT s.name, c.class_name FROM students s LEFT JOIN classes c ON s.class_id = c.class_id UNION SELECT s.name, c.class_name FROM students s RIGHT JOIN classes c ON s.class_id = c.class_id;
三、完整示例
1. 創(chuàng)建數(shù)據(jù)庫和表
-- 創(chuàng)建數(shù)據(jù)庫 CREATE DATABASE school_management; USE school_management; -- 創(chuàng)建班級表 CREATE TABLE classes ( class_id INT AUTO_INCREMENT PRIMARY KEY, class_name VARCHAR(50) NOT NULL, teacher VARCHAR(50), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 創(chuàng)建學(xué)生表(帶外鍵) CREATE TABLE students ( student_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT CHECK (age BETWEEN 10 AND 30), gender ENUM('男', '女'), class_id INT, FOREIGN KEY (class_id) REFERENCES classes(class_id) ON DELETE SET NULL ON UPDATE CASCADE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 創(chuàng)建成績表(多外鍵) CREATE TABLE scores ( score_id INT AUTO_INCREMENT PRIMARY KEY, student_id INT, subject VARCHAR(50), score DECIMAL(5,2), exam_date DATE, FOREIGN KEY (student_id) REFERENCES students(student_id) ON DELETE CASCADE ON UPDATE CASCADE );
2. 插入測試數(shù)據(jù)
-- 插入班級數(shù)據(jù) INSERT INTO classes (class_name, teacher) VALUES ('一年級一班', '王老師'), ('一年級二班', '李老師'), ('二年級一班', '張老師'); -- 插入學(xué)生數(shù)據(jù) INSERT INTO students (name, age, gender, class_id) VALUES ('張三', 18, '男', 1), ('李四', 19, '女', 1), ('王五', 17, '男', 2), ('趙六', 20, '女', NULL); -- 插入成績數(shù)據(jù) INSERT INTO scores (student_id, subject, score, exam_date) VALUES (1, '數(shù)學(xué)', 90.5, '2023-06-15'), (1, '語文', 85.0, '2023-06-16'), (2, '數(shù)學(xué)', 92.0, '2023-06-15'), (3, '英語', 88.5, '2023-06-17');
3. 復(fù)雜查詢示例
查詢每個班級的學(xué)生人數(shù)
SELECT c.class_name, COUNT(s.student_id) AS student_count FROM classes c LEFT JOIN students s ON c.class_id = s.class_id GROUP BY c.class_id;
查詢學(xué)生及其班級和成績(多表連接)
SELECT s.name, s.age, c.class_name, sc.subject, sc.score FROM students s LEFT JOIN classes c ON s.class_id = c.class_id LEFT JOIN scores sc ON s.student_id = sc.student_id ORDER BY s.name, sc.subject;
查詢平均分高于85的班級
SELECT c.class_name, AVG(sc.score) AS avg_score FROM classes c JOIN students s ON c.class_id = s.class_id JOIN scores sc ON s.student_id = sc.student_id GROUP BY c.class_id HAVING avg_score > 85;
使用子查詢
-- 查詢沒有參加任何考試的學(xué)生 SELECT name FROM students WHERE student_id NOT IN (SELECT DISTINCT student_id FROM scores);
四、外鍵管理
1. 查看外鍵約束
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_SCHEMA = 'school_management';
2. 刪除外鍵約束
ALTER TABLE students DROP FOREIGN KEY students_ibfk_1;
3. 添加外鍵約束
ALTER TABLE students ADD CONSTRAINT fk_class FOREIGN KEY (class_id) REFERENCES classes(class_id) ON DELETE SET NULL ON UPDATE CASCADE;
到此這篇關(guān)于mysql的基礎(chǔ)語句和外鍵查詢及其語句的文章就介紹到這了,更多相關(guān)mysql的基礎(chǔ)語句和外鍵查詢及其語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何修改Linux服務(wù)器中的MySQL數(shù)據(jù)庫密碼
這篇文章主要介紹了如何修改Linux服務(wù)器中的MySQL數(shù)據(jù)庫密碼問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06mysql數(shù)據(jù)庫插入速度和讀取速度的調(diào)整記錄
由于項目變態(tài)需求;需要在一個比較短時間段急劇增加數(shù)據(jù)庫記錄(兩三天內(nèi),由于0增加至4億)。在整個過程調(diào)優(yōu)過程非常艱辛2012-07-07MySQL四種日志binlog/redolog/relaylog/undolog詳解
undo?log主要存儲的也是邏輯日志,比如我們要insert一條數(shù)據(jù)了,那undo?log會記錄的一條對應(yīng)的delete日志,我們要update一條記錄時,它會記錄一條對應(yīng)相反的update記錄,這篇文章主要介紹了MySQL四種日志binlog/redolog/relaylog/undolog,需要的朋友可以參考下2024-08-08MySQL數(shù)據(jù)庫多表操作通關(guān)指南(外鍵約束和多表聯(lián)合查詢)
看再多的資料不如自己親自動手實戰(zhàn),往往實戰(zhàn)才能滲透知識,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫多表操作的相關(guān)資料,包含外鍵約束和多表聯(lián)合查詢等,需要的朋友可以參考下2022-06-06