[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"academy-settings":3,"nav-course-tabs":225,"blog-article-hoc-sql-co-ban":282},{"site":4,"home":19,"footer":172,"payment":214,"promo":221},{"name":5,"tagline":6,"url":7,"logoUrl":8,"primaryColor":9,"contactEmail":10,"hotline":11,"facebookUrl":12,"youtubeUrl":13,"kungfutechUrl":14,"announcement":15},"MelyDemy","Học lập trình thực chiến từ con số 0","https:\u002F\u002Fmelydemy.io.vn","\u002Fimages\u002Fbrand\u002Flogo.svg?v=3","#dc2626","techmely.creation@gmail.com","","https:\u002F\u002Fwww.facebook.com\u002Fmelydemy.techmely\u002F","https:\u002F\u002Fwww.youtube.com\u002Fc\u002FTechMely?sub_confirmation=1","https:\u002F\u002Fkungfutech.io.vn",{"enabled":16,"text":17,"link":18},true,"Ưu đãi Mely 29k — học lập trình trọn đời chỉ từ 29.000đ","\u002Fkhoa-hoc\u002F29k",{"seo":20,"hero":26,"banners":49,"sectionCopy":60,"categories":78,"features":100,"onlyMelyDemy":117,"aboutUs":130,"testimonials":142,"newsletter":167},{"title":21,"description":22,"keywords":23},"MelyDemy - Khoá học lập trình thực chiến dành cho bạn","MelyDemy cung cấp khoá học lập trình Frontend, Backend, DevOps và AI thực chiến bằng tiếng Việt, học trọn đời chỉ từ 29.000đ.",[24,5,25],"Khoá học lập trình","Thực chiến lập trình",{"badge":27,"title":28,"highlight":29,"description":30,"primaryCta":31,"secondaryCta":34,"stats":36},"Nền tảng học lập trình #1 cho người Việt","Học kỹ năng công nghệ","thực chiến, trọn đời","Hơn 40 khoá học Frontend, Backend, DevOps và AI — video bài bản, source code đi kèm, học mọi lúc mọi nơi.",{"label":32,"to":33},"Khám phá khoá học","\u002Fkhoa-hoc",{"label":35,"to":18},"Ưu đãi 29k",[37,40,43,46],{"value":38,"label":39},"40+","Khoá học",{"value":41,"label":42},"15.000+","Học viên",{"value":44,"label":45},"4.8\u002F5","Đánh giá",{"value":47,"label":48},"Trọn đời","Truy cập",[50,56],{"badge":51,"title":52,"description":53,"link":54,"color":55},"Xu hướng 2026","Lộ trình AI thực chiến","Prompt, workflow và tích hợp công cụ — học theo bài lab, áp dụng ngay vào dự án.","\u002Fkhoa-hoc\u002Fai","#7c3aed",{"badge":57,"title":58,"description":59,"link":18,"color":9},"Mely 29k","Học lập trình từ 29.000đ","Video trọn đời, source code đi kèm — bắt đầu Frontend, Backend hoặc DevOps hôm nay.",{"courses":61,"onlyMelyDemy":64,"about":67,"community":70,"blog":74},{"title":62,"subtitle":63},"Khoá học nổi bật","Các khoá học xây dựng bài bản, đáp ứng nhu cầu thực tế của thị trường",{"title":65,"subtitle":66},"Chỉ có tại MelyDemy","Khoá học chất lượng với mức giá dễ tiếp cận nhất",{"title":68,"subtitle":69},"Lộ trình học trên MelyDemy","Ba lộ trình cốt lõi — Full-stack, DevOps và AI — giúp bạn áp dụng ngay vào dự án thực tế.",{"headline":71,"title":72,"subtitle":73},"Được học viên tin tưởng","Học viên nói gì về MelyDemy","Hàng nghìn học viên đã học lập trình thực chiến — từ sinh viên, fresher đến người chuyển ngành.",{"title":75,"subtitle":76,"listPageSubtitle":77},"Blog","Tin tức, kiến thức công nghệ mới nhất từ MelyDemy","Tổng hợp tin tức AI và công nghệ mới nhất — kiến thức thực chiến cho lập trình viên.",[79,84,88,93,97],{"label":80,"to":81,"icon":82,"color":83},"Frontend","\u002Fkhoa-hoc\u002Fkhoa-hoc-frontend","i-lucide-layout-template","#f97316",{"label":85,"to":86,"icon":87,"color":9},"Backend","\u002Fkhoa-hoc\u002Fkhoa-hoc-backend","i-lucide-server",{"label":89,"to":90,"icon":91,"color":92},"DevOps","\u002Fkhoa-hoc\u002Fkhoa-hoc-devops","i-lucide-container","#0ea5e9",{"label":94,"to":54,"icon":95,"color":96},"AI","i-lucide-sparkles","#8b5cf6",{"label":57,"to":18,"icon":98,"color":99},"i-lucide-ticket-percent","#16a34a",[101,105,109,113],{"title":102,"description":103,"icon":104},"Video trọn đời","Mua một lần, học mãi mãi — cập nhật nội dung miễn phí.","i-lucide-infinity",{"title":106,"description":107,"icon":108},"Source code đi kèm","Mỗi bài học đều có code mẫu để bạn thực hành ngay.","i-lucide-code-xml",{"title":110,"description":111,"icon":112},"Tiếng Việt dễ hiểu","Giảng viên giải thích rõ ràng, ví dụ sát dự án thật.","i-lucide-languages",{"title":114,"description":115,"icon":116},"Cộng đồng hỗ trợ","Hỏi đáp nhanh cùng cộng đồng KungFuTech và mentor.","i-lucide-users-round",[118,122,126],{"title":119,"description":120,"image":121},"Giới thiệu chương trình","\u003Cp>Học lập trình với khoá học chất lượng: video bài giảng, source code và quyền truy cập trọn đời.\u003C\u002Fp>","\u002Fimages\u002Fhome\u002F49k-section-1.jpg",{"title":123,"description":124,"image":125},"Học dễ dàng, chi phí thấp","\u003Cp>Khoá học ngắn gọn, thực tế với mức giá chỉ từ 29K. Theo dõi thường xuyên để cập nhật ưu đãi.\u003C\u002Fp>","\u002Fimages\u002Fhome\u002F49k-section-2.jpg",{"title":127,"description":128,"image":129},"Chọn khoá học và bắt đầu","\u003Cp>Khám phá khoá học Frontend, Backend, DevOps, Mobile và AI — bắt đầu hành trình của bạn hôm nay.\u003C\u002Fp>","\u002Fimages\u002Fhome\u002F49k-section-3.jpg",[131,136,139],{"title":132,"description":133,"icon":134,"image":135},"Backend & Frontend","Xây dựng ứng dụng web từ giao diện đến hệ thống phía sau với công nghệ hiện đại.","i-lucide-layers","\u002Fimages\u002Fhome\u002Fabout-track-1.jpg",{"title":89,"description":137,"icon":91,"image":138},"Triển khai, vận hành và tối ưu hệ thống để ứng dụng chạy ổn định, mở rộng dễ dàng.","\u002Fimages\u002Fhome\u002Fabout-track-2.jpg",{"title":94,"description":140,"icon":95,"image":141},"Xây dựng ứng dụng tích hợp AI, tự động hoá workflow và phát triển sản phẩm thông minh.","\u002Fimages\u002Fhome\u002Fabout-track-3.jpg",[143,147,151,155,159,163],{"fullname":144,"role":145,"description":146},"Nguyễn Minh Anh","Sinh viên CNTT — Đại học Bách Khoa TP.HCM","Rất nhiều khoá học bổ ích từ Frontend, Backend đến DevOps — mình chọn lộ trình phù hợp mà không bị lạc. Video và source trọn đời, ôn lại rất tiện.",{"fullname":148,"role":149,"description":150},"Trần Hoàng Nam","Kế toán chuyển ngành IT — Hà Nội","Khoá AI giúp mình hiểu prompt, workflow và cách tích hợp công cụ vào việc học code hằng ngày. Bài ngắn, học buổi tối không bị quá tải.",{"fullname":152,"role":153,"description":154},"Lê Thị Hương","Fresher Frontend — FPT Software Đà Nẵng","Khoá TypeScript làm rõ type, interface và cách refactor code cũ — mình tự tin review PR và làm task trong dự án thật.",{"fullname":156,"role":157,"description":158},"Phạm Quốc Bảo","Kỹ sư cơ khí — tự học lập trình buổi tối","Lộ trình DevOps (CI\u002FCD, Docker) giúp mình hiểu pipeline deploy thay vì chỉ code local. Checklist từng tuần giữ nhịp học ổn định.",{"fullname":160,"role":161,"description":162},"Võ Thanh Tú","Intern Backend — startup tại TP.HCM","Khoá Node.js và thiết kế API giúp mình nắm REST, validation và database qua bài lab thực tế. Slide đính kèm tiện ôn phỏng vấn.",{"fullname":164,"role":165,"description":166},"Đặng Kim Ngân","Designer chuyển sang UI Developer","Khoá HTML\u002FCSS Grid & Flexbox giúp mình chuyển layout Figma sang markup chuẩn, responsive đúng spec.",{"title":168,"description":169,"placeholder":170,"buttonLabel":171},"Nhận tin khoá học & ưu đãi","Đăng ký email để cập nhật lộ trình mới, workshop và chương trình Mely 29k.","Email của bạn","Đăng ký",{"brandLine":173,"description":174,"columns":175},"MELYDEMY — Học lập trình từ con số 0","Nền tảng khoá học lập trình thực chiến thuộc hệ sinh thái KungFuTech.",[176,184,204],{"title":39,"links":177},[178,180,182],{"label":179,"to":33},"Tất cả khoá học",{"label":181,"to":18},"Ưu đãi Mely 29k",{"label":183,"to":54},"Khoá học AI",{"title":185,"links":186},"Tài nguyên",[187,189,192,195,198,201],{"label":75,"to":188},"\u002Fblog",{"label":190,"to":191},"Giới thiệu","\u002Fgioi-thieu",{"label":193,"to":194},"Liên hệ","\u002Flien-he",{"label":196,"to":197},"Câu hỏi thường gặp","\u002Fcau-hoi-thuong-gap",{"label":199,"to":200},"Điều khoản","\u002Fterms-and-conditions",{"label":202,"to":203},"Chính sách bảo mật","\u002Fprivacy-policy",{"title":205,"links":206},"Hệ sinh thái",[207,209,212],{"label":208,"href":14},"KungFuTech",{"label":210,"href":211},"TechMely YouTube","https:\u002F\u002Fwww.youtube.com\u002Fc\u002FTechMely",{"label":213,"href":12},"Facebook MelyDemy",{"bankName":215,"bankCode":216,"accountNumber":217,"accountName":218,"qrTemplate":219,"note":220},"MB Bank","MBBank","0680126400005","PHAM NGOC HOA","https:\u002F\u002Fqr.sepay.vn\u002Fimg?acc={accountNumber}&bank={bankCode}&amount={amount}&des={paymentCode}","Khoá học sẽ được gửi vào email của bạn sau khi thanh toán thành công.",{"promo49k":222},{"enabled":16,"displayPrice":223,"title":57,"description":224},29000,"Học lập trình trọn đời chỉ từ 29.000đ",[226,238,249,260,272],{"id":227,"name":228,"slug":229,"title":24,"canonicalSlug":230,"heroDescription":231,"seoTitle":232,"seoDescription":233,"intro":234},1,"Tất cả các khóa học","tat-ca",null,"Khám phá lộ trình Frontend, Backend, DevOps và AI — học thực chiến với video trọn đời.","Khoá học lập trình online tiếng Việt | MelyDemy","Học lập trình online cùng MelyDemy: khoá Frontend, Backend, DevOps và AI thực chiến bằng tiếng Việt, video xem trọn đời, kèm source code dự án.",[235,236,237],"MelyDemy là nền tảng khoá học lập trình bằng video tiếng Việt, tập trung vào kỹ năng làm được việc: mỗi khoá đi từ kiến thức nền tảng đến dự án thực tế, có source code đi kèm để bạn thực hành theo từng bài.","Danh mục gồm bốn nhóm chính. Frontend dành cho người muốn xây giao diện web với HTML, CSS, JavaScript, ReactJS hay Next.js. Backend dạy lập trình API, cơ sở dữ liệu và kiến trúc hệ thống với nhiều ngôn ngữ và framework. DevOps hướng dẫn Docker, CI\u002FCD, cloud và vận hành hệ thống. Nhóm AI giúp bạn dùng các công cụ và agent AI để tăng năng suất làm việc.","Bạn có thể lọc theo nhóm hoặc tìm theo tên công nghệ. Khoá học được mua một lần và xem lại không giới hạn thời gian, phù hợp cho cả người mới bắt đầu lẫn lập trình viên muốn mở rộng kỹ năng. Nếu chưa biết nên bắt đầu từ đâu, hãy chọn nhóm Frontend hoặc Backend và xem phần nội dung chi tiết của từng khoá để đánh giá độ phù hợp.",{"id":239,"name":85,"slug":240,"title":85,"canonicalSlug":241,"heroDescription":242,"seoTitle":243,"seoDescription":244,"intro":245},2,"khoa-hoc-backend","backend","API, database và kiến trúc hệ thống — từ nền tảng đến dự án thực tế.","Khoá học lập trình Backend online | MelyDemy","Học lập trình Backend bằng tiếng Việt: xây dựng API, làm việc với cơ sở dữ liệu và thiết kế hệ thống qua các khoá video thực chiến tại MelyDemy.",[246,247,248],"Lập trình Backend là phần xử lý đằng sau mọi ứng dụng: nhận yêu cầu từ giao diện, xử lý nghiệp vụ, lưu và truy vấn dữ liệu rồi trả kết quả về cho người dùng. Các khoá Backend tại MelyDemy hướng dẫn bạn xây dựng API, làm việc với cơ sở dữ liệu quan hệ và NoSQL, xác thực người dùng và triển khai ứng dụng.","Mỗi khoá bắt đầu từ nền tảng ngôn ngữ và framework, sau đó đi tới các chủ đề thực tế như thiết kế REST API, tối ưu truy vấn, bảo mật và kiểm thử. Bạn học qua video, làm theo source code và hoàn thành dự án cuối khoá để có sản phẩm đưa vào hồ sơ.","Hãy chọn ngôn ngữ phù hợp với mục tiêu công việc của bạn, xem nội dung từng chương trong trang khoá học rồi bắt đầu học theo tốc độ riêng. Học viên có thể xem lại bài giảng không giới hạn thời gian.",{"id":250,"name":80,"slug":251,"title":80,"canonicalSlug":252,"heroDescription":253,"seoTitle":254,"seoDescription":255,"intro":256},3,"khoa-hoc-frontend","frontend","HTML, CSS, JavaScript và framework hiện đại — xây giao diện responsive chuẩn doanh nghiệp.","Khoá học lập trình Frontend online | MelyDemy","Học Frontend bằng tiếng Việt: HTML, CSS, JavaScript, ReactJS, Next.js và nhiều hơn nữa, xây giao diện responsive qua khoá video thực chiến tại MelyDemy.",[257,258,259],"Lập trình Frontend là kỹ năng xây dựng phần giao diện người dùng nhìn thấy và tương tác trên web. Các khoá Frontend tại MelyDemy đi từ HTML, CSS và JavaScript nền tảng đến các framework hiện đại như ReactJS và Next.js, giúp bạn dựng giao diện responsive đạt chuẩn doanh nghiệp.","Nội dung nhấn mạnh thực hành: bạn xây dựng từng thành phần giao diện, quản lý trạng thái, gọi API, tối ưu hiệu năng và SEO, rồi hoàn thiện một dự án hoàn chỉnh. Source code được cung cấp để bạn đối chiếu và tự chỉnh sửa.","Nếu mới bắt đầu, hãy học chắc JavaScript trước khi chuyển sang framework. Nếu đã có nền tảng, bạn có thể chọn thẳng khoá ReactJS hoặc Next.js. Xem mục nội dung trong từng khoá để biết chính xác bạn sẽ học những gì.",{"id":261,"name":262,"slug":263,"title":262,"canonicalSlug":264,"heroDescription":265,"seoTitle":266,"seoDescription":267,"intro":268},4,"Devops","khoa-hoc-devops","devops","CI\u002FCD, container và vận hành hệ thống — triển khai ổn định, mở rộng dễ dàng.","Khoá học DevOps online tiếng Việt | MelyDemy","Học DevOps bằng tiếng Việt: Docker, CI\u002FCD, cloud và vận hành hệ thống qua các khoá video thực chiến, giúp triển khai ứng dụng ổn định tại MelyDemy.",[269,270,271],"DevOps kết nối phát triển và vận hành: tự động hoá việc build, kiểm thử, triển khai và giám sát để phần mềm được đưa đến người dùng nhanh và ổn định hơn. Các khoá DevOps tại MelyDemy hướng dẫn bạn làm quen với Linux, container, pipeline CI\u002FCD và hạ tầng đám mây.","Bạn sẽ thực hành trực tiếp: đóng gói ứng dụng bằng Docker, thiết lập quy trình tự động triển khai, quản lý cấu hình và theo dõi hệ thống khi chạy thật. Mỗi bài đều đi kèm ví dụ có thể làm lại trên máy hoặc máy chủ của bạn.","Nhóm khoá này phù hợp với lập trình viên muốn tự triển khai sản phẩm của mình, hoặc người muốn chuyển hướng sang vai trò DevOps và cloud. Hãy xem nội dung chi tiết từng khoá để chọn lộ trình phù hợp.",{"id":273,"name":94,"slug":274,"title":94,"canonicalSlug":274,"heroDescription":275,"seoTitle":276,"seoDescription":277,"intro":278},5,"ai","Prompt, workflow và tích hợp công cụ AI — học theo bài lab, áp dụng ngay vào dự án.","Khoá học AI ứng dụng cho lập trình | MelyDemy","Học AI ứng dụng bằng tiếng Việt: prompt, workflow tự động và agent AI qua các bài lab thực hành, áp dụng ngay vào công việc và dự án tại MelyDemy.",[279,280,281],"Các khoá AI tại MelyDemy tập trung vào việc ứng dụng: dùng công cụ AI để viết code nhanh hơn, tự động hoá công việc lặp lại và xây dựng agent hỗ trợ công việc hằng ngày, thay vì chỉ giải thích lý thuyết.","Bạn sẽ học cách viết prompt hiệu quả, thiết kế workflow kết nối nhiều công cụ, tự host agent trên máy chủ riêng và tích hợp AI vào quy trình phát triển phần mềm. Mỗi chủ đề có bài lab để bạn làm theo và áp dụng được ngay.","Nhóm khoá này phù hợp với lập trình viên, người làm nội dung và bất kỳ ai muốn tăng năng suất bằng AI. Hãy xem phần nội dung từng khoá để biết công cụ và kết quả bạn sẽ đạt được.",{"id":283,"slug":284,"title":285,"excerpt":286,"createdAt":287,"updatedAt":287,"category":288,"thumbnail":290,"content":291,"head":292,"author":299,"image":302,"same_category":303,"sameCategory":352},"94151f16-08e8-47d6-95f1-599aeceaec4c","hoc-sql-co-ban","Học SQL cơ bản: SELECT, JOIN, GROUP BY kèm ví dụ","SQL cơ bản cho người mới: truy vấn, lọc, JOIN, GROUP BY, index và bài tập với MySQL.","2026-11-03T15:07:33",{"name":75,"slug":289,"description":11},"blog",{"url":11,"alt":285},"\u003Cp>\u003Cstrong>Học SQL cơ bản\u003C\u002Fstrong> bắt đầu từ việc hiểu bảng dữ liệu, sau đó luyện các câu lệnh \u003Ccode>SELECT\u003C\u002Fcode>, \u003Ccode>WHERE\u003C\u002Fcode>, \u003Ccode>ORDER BY\u003C\u002Fcode>, \u003Ccode>JOIN\u003C\u002Fcode>, \u003Ccode>GROUP BY\u003C\u002Fcode> và các lệnh thêm, sửa, xoá dữ liệu. Bài viết này dùng một cơ sở dữ liệu mẫu về khoá học để minh hoạ từng câu lệnh, kèm bài tập tự luyện và giải thích về index, transaction để bạn dùng SQL hiệu quả trong công việc.\u003C\u002Fp>\n\n\u003Ch2>SQL là gì và ai cần học SQL?\u003C\u002Fh2>\n\u003Cp>SQL (Structured Query Language) là ngôn ngữ dùng để truy vấn và quản lý dữ liệu trong cơ sở dữ liệu quan hệ như MySQL, PostgreSQL, SQL Server, SQLite. Không chỉ lập trình viên, nhiều vị trí khác cũng dùng SQL hằng ngày:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Backend developer:\u003C\u002Fstrong> thiết kế bảng, viết truy vấn cho API.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Data analyst:\u003C\u002Fstrong> lấy và tổng hợp dữ liệu để làm báo cáo.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Tester, product, marketing:\u003C\u002Fstrong> tự kiểm tra dữ liệu mà không phải nhờ lập trình viên.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Cú pháp SQL cơ bản khá giống nhau giữa các hệ quản trị; bài viết dùng MySQL cho ví dụ.\u003C\u002Fp>\n\n\u003Ch2>Chuẩn bị môi trường\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>Cài MySQL Community Server và công cụ giao diện như MySQL Workbench, DBeaver hoặc TablePlus.\u003C\u002Fli>\n\u003Cli>Hoặc chạy nhanh bằng Docker: \u003Ccode>docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=secret mysql:8\u003C\u002Fcode>. Xem thêm bài \u003Ca href=\"\u002Fblog\u002Fdocker-la-gi-huong-dan-cho-nguoi-moi\">Docker là gì\u003C\u002Fa>.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>Tạo cơ sở dữ liệu mẫu\u003C\u002Fh2>\n\u003Cpre>\u003Ccode>CREATE DATABASE hoc_sql;\nUSE hoc_sql;\n\nCREATE TABLE courses (\n  id INT PRIMARY KEY AUTO_INCREMENT,\n  name VARCHAR(200) NOT NULL,\n  category VARCHAR(50),\n  price INT\n);\n\nCREATE TABLE students (\n  id INT PRIMARY KEY AUTO_INCREMENT,\n  name VARCHAR(100),\n  city VARCHAR(50)\n);\n\nCREATE TABLE enrollments (\n  id INT PRIMARY KEY AUTO_INCREMENT,\n  student_id INT,\n  course_id INT,\n  enrolled_at DATE,\n  FOREIGN KEY (student_id) REFERENCES students(id),\n  FOREIGN KEY (course_id) REFERENCES courses(id)\n);\n\nINSERT INTO courses (name, category, price) VALUES\n('Python cơ bản', 'backend', 29000),\n('ReactJS', 'frontend', 49000),\n('Docker', 'devops', 39000);\n\nINSERT INTO students (name, city) VALUES\n('An', 'Hà Nội'), ('Bình', 'Đà Nẵng'), ('Chi', 'TP.HCM');\n\nINSERT INTO enrollments (student_id, course_id, enrolled_at) VALUES\n(1, 1, '2026-10-01'), (1, 2, '2026-10-05'), (2, 1, '2026-10-07'), (3, 3, '2026-10-10');\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Dữ liệu trên chỉ là ví dụ minh hoạ cho bài học.\u003C\u002Fp>\n\n\u003Ch2>Truy vấn với SELECT\u003C\u002Fh2>\n\u003Cpre>\u003Ccode>SELECT * FROM courses;\nSELECT name, price FROM courses;\nSELECT name, price FROM courses WHERE price &lt; 40000;\nSELECT name FROM courses WHERE category IN ('backend', 'devops');\nSELECT name FROM courses WHERE name LIKE '%React%';\nSELECT name, price FROM courses ORDER BY price DESC LIMIT 2;\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cul>\n\u003Cli>\u003Ccode>WHERE\u003C\u002Fcode> lọc dòng theo điều kiện; kết hợp với \u003Ccode>AND\u003C\u002Fcode>, \u003Ccode>OR\u003C\u002Fcode>, \u003Ccode>BETWEEN\u003C\u002Fcode>, \u003Ccode>IN\u003C\u002Fcode>, \u003Ccode>LIKE\u003C\u002Fcode>, \u003Ccode>IS NULL\u003C\u002Fcode>.\u003C\u002Fli>\n\u003Cli>\u003Ccode>ORDER BY\u003C\u002Fcode> sắp xếp; \u003Ccode>LIMIT\u003C\u002Fcode> giới hạn số dòng (rất hữu ích khi phân trang).\u003C\u002Fli>\n\u003Cli>Trong dự án thật, hãy chọn cột cụ thể thay vì \u003Ccode>SELECT *\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>JOIN – kết hợp nhiều bảng\u003C\u002Fh2>\n\u003Cp>Dữ liệu được tách thành nhiều bảng để tránh lặp. \u003Ccode>JOIN\u003C\u002Fcode> ghép chúng lại khi truy vấn.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>-- Học viên nào học khoá nào\nSELECT s.name AS hoc_vien, c.name AS khoa_hoc, e.enrolled_at\nFROM enrollments e\nJOIN students s ON s.id = e.student_id\nJOIN courses c ON c.id = e.course_id;\n\n-- Khoá học nào chưa có ai đăng ký\nSELECT c.name\nFROM courses c\nLEFT JOIN enrollments e ON e.course_id = c.id\nWHERE e.id IS NULL;\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ctable>\n\u003Cthead>\u003Ctr>\u003Cth>Loại JOIN\u003C\u002Fth>\u003Cth>Kết quả\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>\u003Ccode>INNER JOIN\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>Chỉ các dòng khớp ở cả hai bảng\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Ccode>LEFT JOIN\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>Tất cả dòng bảng trái, bảng phải không khớp thì là NULL\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>\u003Ccode>RIGHT JOIN\u003C\u002Fcode>\u003C\u002Ftd>\u003Ctd>Ngược lại với LEFT JOIN\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>FULL JOIN\u003C\u002Ftd>\u003Ctd>Tất cả dòng hai bảng (MySQL không hỗ trợ trực tiếp, dùng UNION)\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\u003Ch2>GROUP BY và hàm tổng hợp\u003C\u002Fh2>\n\u003Cpre>\u003Ccode>-- Số học viên của mỗi khoá\nSELECT c.name, COUNT(e.id) AS so_hoc_vien\nFROM courses c\nLEFT JOIN enrollments e ON e.course_id = c.id\nGROUP BY c.id, c.name\nORDER BY so_hoc_vien DESC;\n\n-- Chỉ lấy khoá có từ 2 học viên trở lên\nSELECT course_id, COUNT(*) AS so_hoc_vien\nFROM enrollments\nGROUP BY course_id\nHAVING COUNT(*) &gt;= 2;\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Các hàm tổng hợp hay dùng: \u003Ccode>COUNT\u003C\u002Fcode>, \u003Ccode>SUM\u003C\u002Fcode>, \u003Ccode>AVG\u003C\u002Fcode>, \u003Ccode>MIN\u003C\u002Fcode>, \u003Ccode>MAX\u003C\u002Fcode>. Ghi nhớ: \u003Ccode>WHERE\u003C\u002Fcode> lọc trước khi nhóm, \u003Ccode>HAVING\u003C\u002Fcode> lọc sau khi nhóm.\u003C\u002Fp>\n\n\u003Ch2>Thêm, sửa, xoá dữ liệu\u003C\u002Fh2>\n\u003Cpre>\u003Ccode>INSERT INTO students (name, city) VALUES ('Dũng', 'Cần Thơ');\nUPDATE courses SET price = 35000 WHERE id = 3;\nDELETE FROM enrollments WHERE id = 4;\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Cảnh báo:\u003C\u002Fstrong> luôn kiểm tra điều kiện \u003Ccode>WHERE\u003C\u002Fcode> trước khi chạy \u003Ccode>UPDATE\u003C\u002Fcode> hoặc \u003Ccode>DELETE\u003C\u002Fcode>. Thiếu \u003Ccode>WHERE\u003C\u002Fcode> sẽ thay đổi toàn bộ bảng. Mẹo an toàn: chạy \u003Ccode>SELECT\u003C\u002Fcode> với cùng điều kiện trước để xem những dòng sẽ bị ảnh hưởng.\u003C\u002Fp>\n\n\u003Ch2>Index – tăng tốc truy vấn\u003C\u002Fh2>\n\u003Cp>Index giống mục lục của cuốn sách, giúp database tìm dữ liệu nhanh mà không phải đọc toàn bộ bảng.\u003C\u002Fp>\n\u003Cpre>\u003Ccode>CREATE INDEX idx_enroll_course ON enrollments(course_id);\nEXPLAIN SELECT * FROM enrollments WHERE course_id = 1;\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Nên tạo index cho cột thường dùng trong \u003Ccode>WHERE\u003C\u002Fcode>, \u003Ccode>JOIN\u003C\u002Fcode>, \u003Ccode>ORDER BY\u003C\u002Fcode>. Tuy nhiên index làm chậm thao tác ghi và tốn dung lượng, vì vậy không nên tạo tràn lan. Dùng \u003Ccode>EXPLAIN\u003C\u002Fcode> để xem truy vấn có dùng index hay không.\u003C\u002Fp>\n\n\u003Ch2>Transaction – đảm bảo toàn vẹn dữ liệu\u003C\u002Fh2>\n\u003Cpre>\u003Ccode>START TRANSACTION;\nUPDATE accounts SET balance = balance - 100000 WHERE id = 1;\nUPDATE accounts SET balance = balance + 100000 WHERE id = 2;\nCOMMIT;  -- hoặc ROLLBACK nếu có lỗi\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Transaction đảm bảo một nhóm thao tác hoặc cùng thành công, hoặc cùng bị huỷ. Đây là nền tảng của các tính năng như thanh toán, chuyển tiền, đặt chỗ.\u003C\u002Fp>\n\n\u003Ch2>Bài tập tự luyện\u003C\u002Fh2>\n\u003Col>\n\u003Cli>Liệt kê tên học viên ở Hà Nội và các khoá họ đã đăng ký.\u003C\u002Fli>\n\u003Cli>Tính tổng doanh thu theo từng danh mục khoá học.\u003C\u002Fli>\n\u003Cli>Tìm học viên đăng ký nhiều khoá nhất.\u003C\u002Fli>\n\u003Cli>Đếm số lượt đăng ký theo từng tháng.\u003C\u002Fli>\n\u003Cli>Tìm các khoá có giá cao hơn giá trung bình (gợi ý: dùng subquery).\u003C\u002Fli>\n\u003C\u002Fol>\n\n\u003Ch2>Sai lầm thường gặp\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>Nối chuỗi trực tiếp dữ liệu người dùng vào câu SQL, gây lỗ hổng SQL injection. Hãy dùng prepared statement hoặc ORM.\u003C\u002Fli>\n\u003Cli>Quên điều kiện JOIN, sinh ra số dòng nhân chéo khổng lồ.\u003C\u002Fli>\n\u003Cli>Chọn cột trong \u003Ccode>SELECT\u003C\u002Fcode> không có trong \u003Ccode>GROUP BY\u003C\u002Fcode> hoặc hàm tổng hợp.\u003C\u002Fli>\n\u003Cli>Lưu ngày tháng dưới dạng chuỗi thay vì kiểu \u003Ccode>DATE\u003C\u002Fcode>\u002F\u003Ccode>DATETIME\u003C\u002Fcode>.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>Thiết kế bảng: những nguyên tắc cơ bản\u003C\u002Fh2>\n\u003Cp>Viết truy vấn tốt bắt đầu từ thiết kế bảng tốt. Một vài nguyên tắc giúp dữ liệu gọn, ít lỗi:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Mỗi bảng mô tả một loại đối tượng\u003C\u002Fstrong>: học viên, khoá học, đăng ký. Không gộp nhiều loại vào một bảng.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Mỗi bảng có khoá chính\u003C\u002Fstrong> (thường là \u003Ccode>id\u003C\u002Fcode> tự tăng hoặc UUID).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Không lặp dữ liệu\u003C\u002Fstrong>: thay vì lưu tên khoá học trong bảng đăng ký, chỉ lưu \u003Ccode>course_id\u003C\u002Fcode> và JOIN khi cần. Đây là tinh thần của chuẩn hoá (normalization).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Dùng khoá ngoại\u003C\u002Fstrong> để database tự đảm bảo không có đăng ký trỏ tới khoá học không tồn tại.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Chọn kiểu dữ liệu phù hợp\u003C\u002Fstrong>: số tiền dùng \u003Ccode>INT\u003C\u002Fcode> hoặc \u003Ccode>DECIMAL\u003C\u002Fcode> (không dùng \u003Ccode>FLOAT\u003C\u002Fcode>), ngày dùng \u003Ccode>DATE\u003C\u002Fcode>, trạng thái có thể dùng \u003Ccode>ENUM\u003C\u002Fcode> hoặc bảng tra cứu.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Đặt ràng buộc\u003C\u002Fstrong>: \u003Ccode>NOT NULL\u003C\u002Fcode>, \u003Ccode>UNIQUE\u003C\u002Fcode> (ví dụ email), \u003Ccode>CHECK\u003C\u002Fcode> để chặn dữ liệu sai ngay từ đầu.\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>Subquery và CTE\u003C\u002Fh2>\n\u003Cp>Khi truy vấn phức tạp, bạn có thể chia nhỏ bằng subquery hoặc CTE (\u003Ccode>WITH\u003C\u002Fcode>), giúp code dễ đọc hơn:\u003C\u002Fp>\n\u003Cpre>\u003Ccode>WITH so_luong AS (\n  SELECT course_id, COUNT(*) AS so_hoc_vien\n  FROM enrollments\n  GROUP BY course_id\n)\nSELECT c.name, COALESCE(s.so_hoc_vien, 0) AS so_hoc_vien\nFROM courses c\nLEFT JOIN so_luong s ON s.course_id = c.id\nWHERE c.price &gt; (SELECT AVG(price) FROM courses);\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>CTE đặc biệt hữu ích cho báo cáo nhiều bước. MySQL 8 trở lên và PostgreSQL đều hỗ trợ CTE và window function (ví dụ \u003Ccode>ROW_NUMBER()\u003C\u002Fcode>, \u003Ccode>RANK()\u003C\u002Fcode>) cho các bài toán xếp hạng, so sánh theo kỳ.\u003C\u002Fp>\n\n\u003Ch2>Câu hỏi thường gặp\u003C\u002Fh2>\n\u003Ch3>Học SQL mất bao lâu?\u003C\u002Fh3>\n\u003Cp>Các câu lệnh cơ bản có thể nắm trong vài tuần luyện tập. Thiết kế cơ sở dữ liệu tốt và tối ưu truy vấn cần thêm kinh nghiệm qua dự án thật.\u003C\u002Fp>\n\u003Ch3>Nên học MySQL hay PostgreSQL?\u003C\u002Fh3>\n\u003Cp>Cả hai đều phổ biến và có cú pháp SQL cơ bản tương tự. Học tốt một hệ thì chuyển sang hệ còn lại khá nhanh.\u003C\u002Fp>\n\u003Ch3>SQL có khó hơn lập trình không?\u003C\u002Fh3>\n\u003Cp>SQL thường dễ bắt đầu hơn vì có tính khai báo: bạn mô tả dữ liệu cần lấy thay vì viết từng bước xử lý.\u003C\u002Fp>\n\u003Ch3>Data analyst có cần học SQL không?\u003C\u002Fh3>\n\u003Cp>Có. SQL là một trong những kỹ năng cốt lõi để lấy và tổng hợp dữ liệu, thường được kết hợp với Python hoặc công cụ BI.\u003C\u002Fp>\n\n\u003Ch2>Kết luận\u003C\u002Fh2>\n\u003Cp>SQL là kỹ năng nền tảng cho cả lập trình viên lẫn người làm dữ liệu. Hãy luyện tập trên một cơ sở dữ liệu mẫu, viết truy vấn mỗi ngày và chú ý đến an toàn khi sửa, xoá dữ liệu. Để học có hệ thống từ thiết kế bảng đến tối ưu truy vấn, tham khảo \u003Ca href=\"\u002Fkhoa-hoc\u002Fkhoa-hoc-mysql\">khoá học MySQL từ cơ bản đến nâng cao\u003C\u002Fa>; nếu đi theo hướng dữ liệu, xem thêm \u003Ca href=\"\u002Fkhoa-hoc\u002Fkhoa-hoc-data-science-python\">Data Science với Python\u003C\u002Fa> và bài \u003Ca href=\"\u002Fblog\u002Flo-trinh-hoc-backend\">lộ trình học backend\u003C\u002Fa>.\u003C\u002Fp>\n",{"description":286,"keywords":293},[294,295,296,297,298],"Học","SQL","bản","SELECT,","JOIN,",{"fullname":300,"avatar":11,"position":301,"quote":11},"Mely Demy","Editor",{"url":11,"alt":285},[304,312,320,328,336,344],{"id":305,"slug":306,"title":307,"excerpt":308,"createdAt":309,"updatedAt":309,"category":310,"thumbnail":311},"9aa1bf78-82ec-4bf0-b0ff-7b0a7bf4b22a","hoc-ai-bat-dau-tu-dau","Học AI bắt đầu từ đâu? Lộ trình cho dev và người mới","Lộ trình học AI: dùng công cụ AI, Python, toán nền, machine learning, deep learning, LLM và AI agent.","2026-11-03T15:09:31",{"name":75,"slug":289,"description":11},{"url":11,"alt":307},{"id":313,"slug":314,"title":315,"excerpt":316,"createdAt":317,"updatedAt":317,"category":318,"thumbnail":319},"f3ad15b5-1753-46e0-ab87-ab9f767c8030","chung-chi-aws-nen-thi-cai-nao","Chứng chỉ AWS nên thi cái nào? Lộ trình từ cơ bản","So sánh Cloud Practitioner, Solutions Architect Associate\u002FProfessional, Developer Associate; lộ trình và cách ôn.","2026-11-03T15:09:08",{"name":75,"slug":289,"description":11},{"url":11,"alt":315},{"id":321,"slug":322,"title":323,"excerpt":324,"createdAt":325,"updatedAt":325,"category":326,"thumbnail":327},"d7e50156-ec43-4afc-b097-1979e02e8d8a","typescript-la-gi","TypeScript là gì? Vì sao dev JavaScript nên học","TypeScript là gì, khác JavaScript thế nào, kiểu dữ liệu, interface, generic và cách dùng với React.","2026-11-03T15:08:43",{"name":75,"slug":289,"description":11},{"url":11,"alt":323},{"id":329,"slug":330,"title":331,"excerpt":332,"createdAt":333,"updatedAt":333,"category":334,"thumbnail":335},"f6d8e6c9-7289-4c91-a5f5-f5f66c9bc5dc","kubernetes-la-gi","Kubernetes là gì? Pod, Node, Service giải thích dễ hiểu","Kubernetes (K8s) là gì, khi nào cần, các khái niệm pod, node, deployment, service và so với Docker.","2026-11-03T15:08:20",{"name":75,"slug":289,"description":11},{"url":11,"alt":331},{"id":337,"slug":338,"title":339,"excerpt":340,"createdAt":341,"updatedAt":341,"category":342,"thumbnail":343},"59f770d8-1fad-4707-99e0-780fc7b997e1","lo-trinh-hoc-devops","Lộ trình học DevOps bắt đầu từ đâu cho người mới","DevOps bắt đầu từ đâu: Linux, Git, Docker, CI\u002FCD, Kubernetes, cloud AWS và giám sát với Grafana.","2026-11-03T15:07:57",{"name":75,"slug":289,"description":11},{"url":11,"alt":339},{"id":345,"slug":346,"title":347,"excerpt":348,"createdAt":349,"updatedAt":349,"category":350,"thumbnail":351},"57b73d1f-a064-4f1e-a57b-0dc9817e8841","cursor-ai-la-gi-huong-dan-su-dung","Cursor AI là gì? Cách dùng Cursor để code nhanh hơn","Cursor AI là gì, khác VS Code ra sao, tính năng Tab, Chat, Agent và cách dùng an toàn trong dự án.","2026-11-03T15:07:10",{"name":75,"slug":289,"description":11},{"url":11,"alt":347},[353,356,359,362,365,368],{"id":305,"slug":306,"title":307,"excerpt":308,"createdAt":309,"updatedAt":309,"category":354,"thumbnail":355},{"name":75,"slug":289,"description":11},{"url":11,"alt":307},{"id":313,"slug":314,"title":315,"excerpt":316,"createdAt":317,"updatedAt":317,"category":357,"thumbnail":358},{"name":75,"slug":289,"description":11},{"url":11,"alt":315},{"id":321,"slug":322,"title":323,"excerpt":324,"createdAt":325,"updatedAt":325,"category":360,"thumbnail":361},{"name":75,"slug":289,"description":11},{"url":11,"alt":323},{"id":329,"slug":330,"title":331,"excerpt":332,"createdAt":333,"updatedAt":333,"category":363,"thumbnail":364},{"name":75,"slug":289,"description":11},{"url":11,"alt":331},{"id":337,"slug":338,"title":339,"excerpt":340,"createdAt":341,"updatedAt":341,"category":366,"thumbnail":367},{"name":75,"slug":289,"description":11},{"url":11,"alt":339},{"id":345,"slug":346,"title":347,"excerpt":348,"createdAt":349,"updatedAt":349,"category":369,"thumbnail":370},{"name":75,"slug":289,"description":11},{"url":11,"alt":347}]